เพื่อทำความเข้าใจหัวข้อที่กล่าวถึงในบทความต่อไป เราต้องเข้าใจกระบวนการสื่อสารระหว่าง IIS และ ASP.NET โดยย่อ สิ่งที่ฉันอธิบายที่นี่คือเซิร์ฟเวอร์ IIS 6 สำหรับ IIS 5 และ IIS 7 นั้นอันแรกอาจกล่าวได้ว่าถูกกำจัดไปแล้ว ในขณะที่ "โหมดคลาสสิก" ของอันหลังนั้นเหมือนกับ IIS 6 ทุกประการ และ "โหมดไปป์ไลน์" ใหม่นั้นพูดถึงแนวคิดบางอย่างใน ASP จริงๆ NET และ IIS บูรณาการอย่างลึกซึ้ง ฉันเชื่อว่าถ้าคุณเข้าใจ IIS 6 และ ASP.NET คุณจะไม่มีปัญหาใด ๆ ในโหมดรวมของ IIS 7
ขั้นแรก มาดูแผนผังง่ายๆ ซึ่งแสดงขั้นตอนหลักๆ หลายประการในกระบวนการทั้งหมดของ IIS ตั้งแต่การรับคำขอไปจนถึงการส่งคืนการตอบกลับ:
ถ้าคุณต้องการดำเนินการเขียน URL ใหม่ในแอปพลิเคชัน ASP.NET คุณมักจะเรียกเมธอด RewritePath ของ HttpContext ในเหตุการณ์ BeginRequest เพื่อเปลี่ยนตำแหน่งการร้องขอไปยัง URL เป้าหมาย ตัวอย่างเช่น เราสามารถแทนที่เมธอด Application_BeginRequest ใน Global.asax เพื่อให้บรรลุเป้าหมายนี้:
สาเหตุที่เขียนซ้ำใน BeginRequest ก็เนื่องมาจากเหตุการณ์นี้เป็นเหตุการณ์แรกสุดที่ถูกทริกเกอร์ในบรรดาเหตุการณ์ Pipeline ทั้งหมด หลังจากเปลี่ยนตำแหน่งในเวลานี้ คุณสมบัติบางอย่างใน HttpContext ปัจจุบันก็เปลี่ยนไปเช่นกัน (เช่น HttpContext.Request.Path) ด้วยวิธีนี้ ตรรกะของตัวจัดการของเหตุการณ์ไปป์ไลน์ต่อไปนี้จะได้รับผลกระทบ ตัวอย่างเช่น เมื่อจำเป็นต้องกำหนดสิทธิ์ตามไดเร็กทอรี เส้นทาง "ที่อยู่" จะถูกนำมาใช้แทนคำขอที่ได้รับจาก ASP.NET โดยปกติแล้ว การเปลี่ยนแปลงที่ "สำคัญ" ที่สุดคือตัวเลือกของตัวจัดการ ตัวอย่างเช่น ในตัวอย่างข้างต้น เราย้ายคำขอไปยังไฟล์ "CustomerList.aspx" เพื่อให้กลไก ASP.NET เลือก System.Web.UI สอดคล้องกับ *.aspx คลาส PageHandlerFactory จัดการคำขอ
คลาส สาธารณะ ทั่ว โลก : System.Web HttpApplication
-
ป้องกัน โมฆะ Application_BeginRequest (ผู้ส่ง วัตถุ EventArgs e)
-
บริบท HttpContext = HttpContext .ปัจจุบัน;
ถ้า (context.Request.Path.Equals( "/ลูกค้า" ,
StringComparison .InvariantCultureIgnoreCase))
-
บริบท RewritePath( "~/CustomerList.aspx" );
-
-
}
ท้ายที่สุด มีสองแนวคิดที่ต้องแยกแยะ ได้แก่ "ASP.NET Pipeline" และ "Web Forms" ทั้งสองเป็นโมเดลที่สำคัญใน ASP.NET แต่ความแตกต่างยังคงใหญ่มาก:
อันที่จริงคำว่า "รูป" ในประโยคข้างต้นอาจจะไม่ถูกต้องก็ได้ เนื่องจาก Web Forms น่าจะเป็นเครื่องมือดำเนินการและแบบจำลองที่สามารถใช้งานได้โดยอิสระ และ System.Web.UI.PageHandlerFactory จะใช้แบบจำลองนี้เท่านั้น เมื่อเราเขียนแอปพลิเคชัน ASP.NET เราสามารถใช้โมเดลนี้ในที่อื่นได้ตามความต้องการของเรา ตัวอย่างเช่น ในบทความ " เทคนิค: การใช้การควบคุมผู้ใช้สำหรับการสร้าง HTML " เราใช้ ascx เป็นเทมเพลตในตัวจัดการทั่วไปเพื่อสร้างเนื้อหา