권장 : IP 및 MAC 주소를 얻는 ASP.NET 메소드 서버의 IP 주소를 얻는 방법은 다음과 같이 DNS 메소드를 사용하기에 간단하고 실용적입니다. private void buttonip_click (객체 발신자, System.EventArgs e) {System m.net.ipaddress [] addressList = dns.gethostByName (dnss
7.4.4 IIS 오류 페이지 사용
ASP 오류 처리 프로세스와 관련된 것은 IIS에 사용자 정의 가능한 오류 페이지를 제공하는 것입니다. 실제로이 기능은 IIS 4.0에서도 찾을 수 있습니다. 그러나 새로운 ASP 내장 객체 Asperror는 사용하기 쉽고보다 강력한 기능을 제공합니다.
4 장에서는 서버.Execute 및 Server.Transfer 메소드를 보면 이미 사용자 정의 된 오류 페이지를 만드는 방법에 대해 이야기했습니다. 우리는 또한 Asperror 객체에 대해 논의하고 사용했지만이 방법은 특정 제한 사항에 따라 다릅니다. 이 섹션에서는 ASP 오류를 처리하는 더 나은 방법을 만들기 위해 사용자 정의 된 오류 페이지를 Asperror 객체와 결합하는 방법을 소개합니다.
vbscript를 사용하여 Asperror 객체의 내용을 확인하여 사용자 정의 오류 페이지를 생성 할 수 있습니다. 오류 컨텐츠에 대한 포괄적 인 정보가 포함 된 문자열을 작성하고 서버 디스크의 로그 파일에 작성하십시오. 그러나 웹 페이지를 디자인하여 방문자가 웹 페이지를 사용할 수 없다는 것을 알 수 있도록 웹 페이지를 디자인 할 수는 없습니다. 방문자가 이전 웹 페이지를 다시로드할지 여부를 선택하거나 홈페이지로 돌아와서 오류가 발생했음을 알지 못하게해야합니다.
VBScript를 사용 하여이 웹 페이지를 만들지 만 사용하는 기능 중 일부는 JSCRIP에도 적용 가능하며 두 스크립팅 언어를 쉽게 변환하는 것이 더 쉽습니다.
이 장 및이 책의 다른 장에 대한 샘플 파일은 http://www.wrox.com 사이트에서 다운로드 할 수 있습니다.
1. 사용자 정의 오류 페이지 설정
사용자 정의 된 오류 페이지를 사용하기 전에 인터넷 서비스 관리자에서 해당 설정을 만들어야합니다 (방법 설정은 4 장 참조). 샘플 파일을 컴퓨터의 wwwroot 디렉토리에로드하고, CHAPTER07 하위 디렉토리의 속성 대화 상자를 열고, 사용자 정의 오류 탭에서 목록을 스크롤하고 HTTP 오류 500 : 100 항목을 선택하고, 속성 편집 버튼을 클릭하고 사용자 정의 오류 페이지의 URL을 입력하십시오.
이제 7 장 서브 디렉토리의 페이지에서 ASP 오류가 발생하면 사용자 정의 오류 페이지가 열립니다.
2. 사용자 정의 오류 페이지를 사용하십시오
브라우저에서 장기 디렉토리를 열고 사용자 정의 오류 페이지를 사용하는 링크를 선택하십시오. 이 페이지에는 다양한 유형의 오류를 생성하기위한 일련의 버튼이 표시됩니다. 구문 오류가있는 페이지에로드로 표시된 버튼을 클릭하십시오.
이것은 syntax_error.asp라는 간단한 페이지를로드합니다. 그러나이 페이지에는 구문 오류가 포함되어 있으므로이 페이지를 볼 수 없습니다. ASP는이 페이지의 컴파일/실행을 종료하고 실행을 사용자 정의 오류 페이지로 전송합니다. 이 페이지에는 오류의 세부 사항과 두 개의 버튼이 표시되며, 이전 페이지 (기본 메뉴)로 돌아가거나 웹 사이트의 기본 홈페이지로 돌아가는 데 사용됩니다.
이 페이지는 서버 디스크 C :/Temp 폴더의 Custom_error.log라는 로그 파일에 오류 보고서를 추가합니다. 파일 편집기에서 열리고 볼 수 있습니다. 로그 파일은 몇 가지 오류를 기록했습니다.
페이지에서 로그 파일을 작성할 수 없음을 나타내는 메시지가 표시되면 IUSR_MACHINENAME (IUSR_COMPUTER NAME) 계정에 C :/TEMP 디렉토리에 액세스 할 수있는 권한이 없기 때문일 수 있습니다. 이 페이지를 테스트 할 때 IUSR_MACHINENAME 계정에는이 디렉토리에 대한 모든 제어가 제공되어야합니다. 그렇지 않으면 IUSR이 완전히 제어되는 폴더를 가리킬 수 있도록 Custom_Error.asp 페이지의 프로그램 코드를 변경해야합니다.
페이지에 오류 메시지가 나타나는 유일한 이유는 age_error.asp 페이지에서 해당 확인란을 선택했기 때문입니다. 이 옵션을 끄고 버튼을 다시 클릭하면 오류의 세부 사항이 표시되지 않지만 오류 메시지는 여전히 Server 디스크의 Custom_Error.log 오류 로그 파일에 기록되어 있습니다.
디스플레이 디버깅 정보 확인란은 로그 파일이 아닌 사용자 정의 오류 페이지를 제공하고 ASP 내장 객체 수집 값을 사용하는 디버그 페이지를 돕습니다.
이 문제는이 장의 다음 섹션에서 나중에 논의되며 원인 오류 페이지의 다른 버튼에서 제공되는 다른 유형의 오류 정보에 대해서도 배울 수 있습니다. 일부 버튼은 다른 버튼보다 더 많은 정보를 제공 할 수 있습니다. 특히 마지막 버튼 만 ASP 오류 코드의 값을 제공합니다 (여기서는 ASP 0177).
(1) 원인 오류 페이지의 기능
앞에서 논의한 예제 페이지와 마찬가지로 <form>을 사용하여 동일한 기술을 사용하여 동일한 페이지에 값을 제출하는 페이지가 동일한 기법을 사용합니다. 그런 다음 ASP 프로그램보기 창에서 제출 버튼을 클릭 한 다음 코드의 해당 부분을 실행하십시오. 또한 페이지의 두 확인란이 선택되었는지 확인하십시오. 그렇다면 프로그램은 먼저 하나 또는 두 세션 수준 변수를 설정하여이를 나타냅니다.
<%
'오류 및 디버그 정보를 표시하는지 확인하십시오
'사용자 정의 오류 페이지에서 검색 할 세션 변수 설정
LEN (request.form (chkshowerror)) 인 경우
세션 (샤워러) = 예
또 다른
세션 (샤워러) =
끝 If
LEN (request.form (CHKSHOWDEBUG)) 인 경우
세션 (showdebug) = 예
또 다른
세션 (showdebug) =
끝 If
...
%>
Server.Transfer의 사용으로 인해 오류가 발생하면 실행중인 웹 페이지의 전체 ASP 환경이 IIS에 의해 사용자 정의 오류 페이지로 전달됩니다. 그러나 스크립트 변수의 값은 사용자 정의 오류 페이지로 전달되지 않으므로 세션 변수를 사용해야하거나 값을 사용자 정의 오류 페이지로 전달하려면 request.form 또는 request.querystring collection에 값을 추가해야합니다.
세션 변수를 설정 한 후 프로그램은 클릭 한 버튼을 계속 보게됩니다. 각 유형의 오류 (첫 번째 유형 제외)는 해당 ASP 코드를 실행하여 생성되며 첫 번째 유형의 오류는 다른 페이지를 호출해야합니다.
...
'양식 섹션 버튼에서 보낸 명령을 찾으십시오.
LEN (request.form (cmdsyntax)) 인 경우
응답
Response.redirect syntax_error.asp
끝 If
len (request.form (cmdparamtype)) 인 경우
intdate = 오류
intday = day (intdate)
끝 If
LEN (request.form (cmdarray)) 인 경우
Dim Arrthis (3)
arrthis (4) = 오류가 발생합니다
끝 If
LEN (request.form (cmdfile)) 인 경우
set objfso = server.createobject (scripting.filesystemobject)
set objtstream = objfso.opentextfile (do_not_exist.txt)
끝 If
len (request.form (cmdpagecount)) 인 경우
set objpagecount = server.createobject (mswc.pagecounter)
objpagecount.wrongproperty = 10
끝 If
LEN (request.form (cmdobject)) 인 경우
set objthis = server.createobject (doson.exist)
끝 If
공유 : 마지막으로 ASP 첨자 경계를 넘을 수있는 솔루션을 찾았습니다. 어제 내 영화 웹 사이트는 정적 콘텐츠 페이지를 생성 할 때 문제가있었습니다. 첨자로 선을 가로 질러 라인을 건너 겠다는 메시지가 표시되었습니다. 나는 전에 그것을 경험 한 적이 없었기 때문에 그것이 무엇인지 몰랐기 때문에 온라인으로 답을 찾았지만 실제로 찾기가 어려웠습니다. 나는 많이 발견했지만 근본적인 문제를 해결할 수 없었습니다.