IIS 5 และ 6 ทำงานแตกต่างกัน
เมื่อมีการร้องขอ IIS จะตรวจสอบสคริปต์แมป (แมปส่วนขยาย) และกำหนดเส้นทางการร้องขอไปยัง aspnet_isapi.dll การดำเนินการของ DLL นี้และวิธีที่คำขอเข้าสู่รันไทม์ ASP.NET จะแตกต่างกันใน IIS5 และ 6 รูปที่ 2 แสดงภาพรวมคร่าวๆ ของกระบวนการนี้
ใน IIS5 นั้น aspnet_isapi.dll จะถูกโฮสต์โดยตรงในกระบวนการ inetinfo.exe หากคุณตั้งค่าระดับการแยกของเว็บไซต์หรือไดเรกทอรีเสมือนเป็นสื่อหรือสูง จะถูกโฮสต์ในกระบวนการของผู้ปฏิบัติงานที่แยกต่างหาก (แยกกัน) ของ IIS เมื่อมีการร้องขอ ASP.NET แรก DLL (aspnet_isapi.dll) จะเริ่มกระบวนการใหม่อื่น aspnet_wp.exe และกำหนดเส้นทางการร้องขอไปยังกระบวนการนี้เพื่อการประมวลผล กระบวนการนี้จะโหลดและโฮสต์รันไทม์ .NET ทุกคำขอที่ส่งต่อไปยัง ISAPI DLL จะถูกส่งไปยังกระบวนการนี้ผ่านการเรียกไปป์ที่มีชื่อ
รูปที่ 2 - มุมมองระดับสูงของโฟลว์คำขอจาก IIS ไปยังรันไทม์ ASP.NET และผ่านไปป์ไลน์การประมวลผลคำขอ IIS5 และ IIS6 โต้ตอบกับ ASP.NET ในรูปแบบที่แตกต่างกัน แต่เมื่อคำขอมาถึงไปป์ไลน์ ASP.NET ขั้นตอนการประมวลผลทั้งหมดจะเหมือนกัน
ไม่เหมือนกับเซิร์ฟเวอร์เวอร์ชันก่อนหน้า IIS6 ได้รับการปรับให้เหมาะสมที่สุดสำหรับ ASP.NET
IIS6 - พูลแอปพลิเคชัน Long Live
IIS6 ทำการเปลี่ยนแปลงที่สำคัญกับโมเดลการประมวลผล IIS ไม่ได้โฮสต์โค้ดปฏิบัติการภายนอกโดยตรงเช่นส่วนขยาย ISAPI อีกต่อไป IIS จะสร้างเธรดผู้ปฏิบัติงานแยกต่างหาก - กลุ่มแอปพลิเคชัน - และการประมวลผลทั้งหมดจะเกิดขึ้นในกระบวนการนี้ รวมถึงการดำเนินการของ ISAPI dll การรวมแอปพลิเคชันเป็นการปรับปรุงครั้งใหญ่ใน IIS6 เนื่องจากช่วยให้สามารถควบคุมโค้ดที่จะดำเนินการในเธรดที่กำหนดได้ละเอียดมาก กลุ่มแอปพลิเคชันสามารถกำหนดค่าได้ในแต่ละเส้นทางเสมือนหรือบนเว็บไซต์ทั้งหมด ช่วยให้คุณสามารถแยกแอปพลิเคชันเว็บแต่ละรายการออกเป็นกระบวนการของตัวเอง เพื่อให้แต่ละแอปพลิเคชันเชื่อมต่อกับแอปพลิเคชันเว็บอื่นที่ทำงานบนเครื่องเดียวกัน แอปพลิเคชันจะถูกแยกออกจากกันอย่างสมบูรณ์ หากกระบวนการหนึ่งขัดข้อง มันจะไม่ส่งผลกระทบต่อกระบวนการอื่นๆ (อย่างน้อยก็จากมุมมองของการประมวลผลเว็บ)
ไม่เพียงเท่านั้น กลุ่มแอปพลิเคชันยังสามารถกำหนดค่าได้สูง คุณสามารถกำหนดค่าสภาพแวดล้อมการรักษาความปลอดภัยที่พูลทำงานโดยการตั้งค่าระดับการดำเนินการเลียนแบบ ซึ่งช่วยให้คุณปรับแต่งสิทธิ์ที่มอบให้กับแอปพลิเคชันเว็บได้ (อีกครั้งในรายละเอียดที่ละเอียดมาก) การปรับปรุงครั้งใหญ่สำหรับ ASP.NET คือพูลแอปพลิเคชันจะแทนที่การตั้งค่าส่วนใหญ่ในส่วน ProcessModel ในไฟล์ machine.config การตั้งค่าในส่วนนี้เป็นเรื่องยากมากที่จะจัดการใน IIS5 เนื่องจากการตั้งค่าเหล่านี้เป็นแบบสากล และไม่สามารถแทนที่ในไฟล์ web.config ของแอปพลิเคชันได้ เมื่อเรียกใช้ IIS6 การตั้งค่าที่เกี่ยวข้องกับ ProcessModel ส่วนใหญ่จะถูกละเว้นและอ่านจากกลุ่มแอปพลิเคชันแทน โปรดทราบว่าส่วนใหญ่จะกล่าวถึงที่นี่ - การตั้งค่าบางอย่าง เช่น ขนาดของเธรดพูลและการตั้งค่าของเธรด IO ยังคงอ่านได้จาก machine.config เนื่องจากไม่มีรายการที่เกี่ยวข้องในการตั้งค่าพูลเธรด
เนื่องจากกลุ่มแอปพลิเคชันเป็นโปรแกรมปฏิบัติการภายนอก จึงสามารถตรวจสอบและจัดการโปรแกรมเหล่านี้ได้อย่างง่ายดาย IIS6 มีชุดการตรวจสอบสถานะของระบบ การรีสตาร์ท และการหมดเวลา ซึ่งสามารถใช้เพื่อตรวจสอบและแก้ไขปัญหาของโปรแกรมได้อย่างง่ายดายในหลายกรณี สุดท้าย กลุ่มแอปพลิเคชันของ IIS6 ไม่ต้องใช้ COM+ เช่นเดียวกับโหมดแยกของ IIS5 ซึ่งสามารถปรับปรุงประสิทธิภาพและปรับปรุงความเสถียรได้ (โดยเฉพาะสำหรับแอปพลิเคชันภายในบางตัวที่จำเป็นต้องเรียกส่วนประกอบ COM)
แม้ว่ากลุ่มแอปพลิเคชัน IIS6 จะเป็น EXE ที่แยกจากกัน ได้รับการปรับให้เหมาะสมที่สุดสำหรับการดำเนินการ HTTP โดยสื่อสารโดยตรงกับไดรเวอร์ HTTP.SYS ในโหมดเคอร์เนล คำขอที่ได้รับจะถูกส่งไปยังกลุ่มแอปพลิเคชันที่เหมาะสมโดยตรง โดยพื้นฐานแล้ว InetInfo เป็นเพียงไฮเปอร์ไวเซอร์และเซิร์ฟเวอร์การกำหนดค่า การโต้ตอบส่วนใหญ่เกิดขึ้นโดยตรงระหว่าง HTTP.SYS และกลุ่มแอปพลิเคชัน ทั้งหมดนี้ทำให้ IIS6 มีสภาพแวดล้อมที่เสถียรและมีประสิทธิภาพมากกว่า IIS5 นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับเนื้อหาแบบคงที่และแอปพลิเคชัน ASP.NET
พูลแอปพลิเคชัน IIS6 มีความเข้าใจโดยธรรมชาติของ ASP.NET ASP.NET สามารถโต้ตอบกับมันได้ที่ API พื้นฐาน ซึ่งอนุญาตให้เข้าถึง API แคช HTTP โดยตรง ซึ่งอนุญาตให้ส่งแคชระดับ ASP.NET ไปยังเว็บเซิร์ฟเวอร์โดยตรง
ใน IIS6 ส่วนขยาย ISAPI จะทำงานในกระบวนการของผู้ปฏิบัติงานของกลุ่มแอปพลิเคชัน รันไทม์ .NET ยังทำงานในกระบวนการเดียวกัน ดังนั้นการสื่อสารระหว่างส่วนขยาย ISAPI และรันไทม์ .NET จึงเกิดขึ้นภายในกระบวนการ ซึ่งมีข้อได้เปรียบด้านประสิทธิภาพตามธรรมชาติเมื่อเปรียบเทียบกับไปป์ที่ระบุชื่อที่ใช้โดย IIS5 แม้ว่ารูปแบบการโฮสต์ของ IIS จะแตกต่างกันมาก แต่อินเทอร์เฟซในโค้ดที่ได้รับการจัดการนั้นคล้ายกันอย่างน่าประหลาดใจ - มีเพียงกระบวนการกำหนดเส้นทางข้อความเท่านั้นที่แตกต่างกันเล็กน้อย