แนะนำ: วิธีการ ASP.NET เพื่อรับที่อยู่ IP และ MAC วิธีการรับที่อยู่ IP ของเซิร์ฟเวอร์นั้นง่ายและใช้งานได้ง่ายในการใช้วิธี DNS ดังต่อไปนี้: โมฆะส่วนตัว ButtonIP_CLICK (ผู้ส่งวัตถุ, System.EventArgs E) {System M.Net.Ipaddress [] addressList = dns.getHostByName (DNS (DNS
7.4.4 การใช้หน้าข้อผิดพลาด IIS
สิ่งที่เกี่ยวข้องกับกระบวนการจัดการข้อผิดพลาด ASP คือการให้หน้าข้อผิดพลาดที่ปรับแต่งได้ของ IIS อันที่จริงคุณลักษณะนี้พบได้ใน IIS 4.0 แต่ Asperror ในตัว ASP ใหม่นั้นใช้งานง่ายกว่าและให้คุณสมบัติที่ทรงพลังมากขึ้น
ในบทที่ 4 เมื่อเราดูที่ Server.execute และ Server. การถ่ายโอนวิธีการถ่ายทอดเราได้พูดคุยเกี่ยวกับวิธีการสร้างหน้าข้อผิดพลาดที่กำหนดเองแล้ว นอกจากนี้เรายังพูดคุยและใช้วัตถุ Asperror แต่วิธีนี้อยู่ภายใต้ข้อ จำกัด บางประการ ในส่วนนี้เราจะแนะนำวิธีรวมหน้าข้อผิดพลาดที่กำหนดเองกับวัตถุ Asperror เพื่อสร้างวิธีที่ดีกว่าในการจัดการกับข้อผิดพลาดของ ASP
เราสามารถใช้ VBScript เพื่อตรวจสอบเนื้อหาของวัตถุ Asperror ดังนั้นการสร้างหน้าข้อผิดพลาดที่กำหนดเอง สร้างสตริงที่มีข้อมูลที่ครอบคลุมเกี่ยวกับเนื้อหาข้อผิดพลาดและเขียนลงในไฟล์บันทึกบนดิสก์เซิร์ฟเวอร์ อย่างไรก็ตามมันเป็นไปไม่ได้ที่จะออกแบบเว็บเพจเพื่อให้ผู้เข้าชมเห็นว่าหน้าเว็บไม่สามารถใช้ได้ ควรอนุญาตให้ผู้เยี่ยมชมเลือกว่าจะโหลดหน้าเว็บก่อนหน้าหรือกลับไปที่หน้าแรกเพื่อที่พวกเขาจะไม่ทราบว่าเกิดข้อผิดพลาด
แม้ว่าเราจะใช้ VBScript เพื่อสร้างหน้าเว็บนี้ แต่คุณสมบัติบางอย่างที่ใช้นั้นใช้กับ JScript และมันก็ง่ายกว่าที่จะแปลงภาษาสคริปต์สองภาษา
ตัวอย่างไฟล์สำหรับบทนี้และบทอื่น ๆ ของหนังสือเล่มนี้สามารถดาวน์โหลดได้จากเว็บไซต์ http://www.wrox.com
1. การตั้งค่าหน้าข้อผิดพลาดที่กำหนดเอง
ก่อนที่คุณจะสามารถใช้หน้าข้อผิดพลาดที่กำหนดเองคุณต้องทำการตั้งค่าที่เกี่ยวข้องในตัวจัดการบริการอินเทอร์เน็ต (ดูบทที่ 4 สำหรับการตั้งค่าวิธีการ) โหลดไฟล์ตัวอย่างลงในไดเรกทอรี wwwroot ของคอมพิวเตอร์เปิดกล่องโต้ตอบคุณสมบัติของไดเรกทอรีย่อยบทที่ 07 ในแท็บข้อผิดพลาดที่กำหนดเองเลื่อนรายการและเลือกรายการ HTTP ข้อผิดพลาด 500: 100 คลิกปุ่มแก้ไขคุณสมบัติและพิมพ์ URL ของหน้าข้อผิดพลาดที่กำหนดเอง
ตอนนี้เมื่อเกิดข้อผิดพลาด ASP ในหน้าในบทที่ 07 ไดเรกทอรีย่อยหน้าข้อผิดพลาดที่กำหนดเองจะถูกเปิด
2. ใช้หน้าข้อผิดพลาดที่กำหนดเอง
เปิดไดเรกทอรีบทที่ 07 ในเบราว์เซอร์ของคุณและเลือกลิงก์ไปยังการใช้หน้าข้อผิดพลาดที่กำหนดเอง หน้านี้แสดงชุดของปุ่มสำหรับการสร้างข้อผิดพลาดประเภทต่างๆ คลิกปุ่มที่ทำเครื่องหมายโหลดหน้าด้วยข้อผิดพลาดทางไวยากรณ์
สิ่งนี้จะโหลดหน้าง่าย ๆ ที่เรียกว่า syntax_error.asp อย่างไรก็ตามหน้านี้ไม่สามารถมองเห็นได้เนื่องจากหน้านี้มีข้อผิดพลาดทางไวยากรณ์ ASP สิ้นสุดการรวบรวม/ดำเนินการของหน้านี้และโอนการดำเนินการไปยังหน้าข้อผิดพลาดที่กำหนดเอง หน้านี้แสดงรายละเอียดของข้อผิดพลาดและสองปุ่มซึ่งใช้เพื่อกลับไปที่หน้าก่อนหน้า (เมนูหลัก) หรือกลับไปที่หน้าแรกเริ่มต้นของเว็บไซต์
หน้านี้ยังผนวกรายงานข้อผิดพลาดไปยังไฟล์บันทึกชื่อ contical_error.log ในโฟลเดอร์เซิร์ฟเวอร์ดิสก์ C:/Temp สามารถเปิดและดูได้ในตัวแก้ไขไฟล์ ไฟล์บันทึกได้บันทึกข้อผิดพลาดหลายประการ
หากคุณได้รับข้อความในหน้าระบุว่าไม่สามารถเขียนไฟล์บันทึกได้อาจเป็นเพราะ iUSR_Machinename (ชื่อ IUSR_COMPUTER) ไม่ได้รับอนุญาตให้เข้าถึงไดเรกทอรี C:/TEMP เมื่อทำการทดสอบหน้านี้บัญชี IUSR_Machinename ควรได้รับการควบคุมทั้งหมดในไดเรกทอรีนี้หรือรหัสโปรแกรมของหน้า custom_error.asp ควรเปลี่ยนเป็นชี้ไปที่โฟลเดอร์ที่ IUSR มีการควบคุมเต็มรูปแบบ
เหตุผลเดียวที่ทำให้ข้อความแสดงข้อผิดพลาดปรากฏในหน้านั้นเป็นเพราะในหน้า cause_error.asp เราเลือกช่องทำเครื่องหมายที่เกี่ยวข้อง หากคุณปิดตัวเลือกนี้และคลิกปุ่มอีกครั้งคุณจะไม่เห็นรายละเอียดของข้อผิดพลาด แต่ข้อความแสดงข้อผิดพลาดยังคงถูกบันทึกไว้ในไฟล์บันทึกข้อผิดพลาดของ custom_error.log บนดิสก์เซิร์ฟเวอร์
ช่องทำเครื่องหมายการดีบักการแสดงผลจะให้หน้าข้อผิดพลาดที่กำหนดเอง (แทนที่จะเป็นไฟล์บันทึก) ข้อมูลเพิ่มเติมและช่วยแก้ไขหน้าดีบั๊กที่ใช้ค่าการรวบรวมวัตถุในตัว ASP
ปัญหานี้จะถูกกล่าวถึงในภายหลังในส่วนต่อไปนี้ของบทนี้และคุณยังสามารถเรียนรู้เกี่ยวกับข้อมูลข้อผิดพลาดประเภทอื่น ๆ ที่มีให้โดยปุ่มอื่น ๆ ในหน้าสาเหตุของหน้าข้อผิดพลาด โปรดทราบว่าปุ่มบางปุ่มสามารถให้ข้อมูลได้มากกว่าปุ่มอื่น ๆ โดยเฉพาะอย่างยิ่งปุ่มสุดท้ายเท่านั้นที่ให้ค่าของรหัสข้อผิดพลาด ASP (นี่คือ ASP 0177)
(1) ฟังก์ชั่นของสาเหตุเป็นหน้าข้อผิดพลาด
เช่นเดียวกับหน้าตัวอย่างที่กล่าวถึงก่อนหน้านี้หน้าเว็บที่ทำให้เกิดข้อผิดพลาดใช้เทคนิคเดียวกันโดยใช้ <form> เพื่อส่งค่าไปยังหน้าเดียวกัน จากนั้นคลิกปุ่มส่งบนหน้าต่างการดูโปรแกรม ASP จากนั้นเรียกใช้ส่วนที่สอดคล้องกันของรหัส ตรวจสอบว่ามีการเลือกช่องทำเครื่องหมายทั้งสองบนหน้าหรือไม่ ถ้าเป็นเช่นนั้นโปรแกรมแรกตั้งค่าตัวแปรระดับเซสชันหนึ่งหรือสองตัวเพื่อระบุสิ่งนี้
-
'ดูว่าเราแสดงข้อผิดพลาดและข้อมูลการดีบักหรือไม่
'ตั้งค่าตัวแปรเซสชันเพื่อดึงข้อมูลในหน้าข้อผิดพลาดที่กำหนดเอง
ถ้า len (request.form (chkshowerror)) แล้ว
เซสชั่น (อาบน้ำ) = ใช่
อื่น
เซสชั่น (อาบน้ำ) =
สิ้นสุดถ้า
ถ้า len (request.form (chkshowdebug)) แล้ว
เซสชัน (showdebug) = ใช่
อื่น
เซสชัน (showdebug) =
สิ้นสุดถ้า
-
-
เนื่องจากการใช้เซิร์ฟเวอร์การถ่ายโอนเมื่อเกิดข้อผิดพลาดสภาพแวดล้อม ASP ทั้งหมดของหน้าเว็บที่กำลังทำงานถูกส่งผ่านไปยังหน้าข้อผิดพลาดที่กำหนดเองโดย IIS อย่างไรก็ตามค่าของตัวแปรสคริปต์จะไม่ถูกส่งผ่านไปยังหน้าข้อผิดพลาดที่กำหนดเองดังนั้นตัวแปรเซสชันจะต้องใช้หรือต้องเพิ่มค่าลงใน request.form หรือ request.querystring collection เพื่อส่งผ่านค่าไปยังหน้าข้อผิดพลาดที่กำหนดเอง
หลังจากตั้งค่าตัวแปรเซสชันโปรแกรมจะยังคงดูปุ่มใดที่ถูกคลิก ข้อผิดพลาดแต่ละประเภท (ยกเว้นประเภทแรก) ถูกสร้างขึ้นโดยการเรียกใช้รหัส ASP ที่สอดคล้องกันและข้อผิดพลาดประเภทแรกต้องเรียกหน้าอื่น
-
'มองหาคำสั่งที่ส่งจากปุ่มส่วนฟอร์ม
ถ้า len (request.form (cmdsyntax)) แล้ว
Response.Clear
Response.redirect syntax_error.asp
สิ้นสุดถ้า
ถ้า len (request.form (cmdparamtype)) แล้ว
intdate = ข้อผิดพลาด
intday = day (intdate)
สิ้นสุดถ้า
ถ้า len (request.form (cmdarray)) แล้ว
Dim Arrthis (3)
arrthis (4) = ทำให้เกิดข้อผิดพลาด
สิ้นสุดถ้า
ถ้า len (request.form (cmdfile)) แล้ว
ตั้งค่า objfso = server.createObject (scripting.filesystemobject)
ตั้งค่า objtstream = objfso.opentextfile (does_not_exist.txt)
สิ้นสุดถ้า
ถ้า len (request.form (cmdpagecount)) แล้ว
ตั้งค่า objpagecount = server.createObject (mswc.pagecounter)
objpagecount.wrongproperty = 10
สิ้นสุดถ้า
ถ้า len (request.form (cmdobject)) แล้ว
ตั้งค่า objthis = server.createObject (notnot.exist)
สิ้นสุดถ้า
แบ่งปัน: ในที่สุดก็พบวิธีแก้ปัญหาเพื่อข้ามขอบเขตของตัวห้อย ASP เมื่อวานนี้เว็บไซต์ภาพยนตร์ของฉันมีปัญหาเมื่อสร้างหน้าเนื้อหาคงที่ มันได้รับแจ้งให้ข้ามเส้นด้วยตัวห้อย ฉันไม่เคยพบมาก่อนดังนั้นฉันจึงไม่รู้ว่ามันคืออะไรดังนั้นฉันจึงมองหาคำตอบทางออนไลน์ แต่มันยากที่จะหา ฉันพบมาก แต่ไม่สามารถแก้ปัญหาพื้นฐานได้