ความแตกต่างระหว่างโหมดไปป์ไลน์ 'คลาสสิค' และ 'รวม' ใน IIS7 คืออะไร


491

ฉันได้ทำการปรับใช้แอปพลิเคชัน ASP.NET MVC เมื่อคืนและพบว่าการปรับใช้ IIS7 นั้นเป็นโหมดรวม คำถามของฉันคืออะไรแตกต่างกันอย่างไร และความหมายของการใช้อย่างใดอย่างหนึ่งคืออะไร?


10
การปรับใช้กับโหมดรวมกับคลาสสิกเป็นอย่างไร แค่อยากรู้อยากเห็น
ปีเตอร์ Lillevold

9
@Peter: URL ส่วนขยายไม่จำเป็นต้องทำการแมปด้วยตนเองในโหมดคลาสสิค
Mehrdad Afshari

2
แม้จะอยู่ใน MVC Global.asax บันทึกอ่าน: สำหรับคำแนะนำในการเปิดใช้ IIS6 หรือ IIS7 แบบคลาสสิกเข้าชมgo.microsoft.com/?LinkId=9394801 หรือคุณสามารถเปิดโหมดรวมและรวมชุด System.Web.Mvc และทุกอย่างก็ใช้งานได้
Jon Erickson

คำตอบ:


643

โหมดคลาสสิค (โหมดเดียวใน IIS6 และด้านล่าง) เป็นโหมดที่ IIS ทำงานได้เฉพาะกับส่วนขยาย ISAPI และตัวกรอง ISAPI โดยตรง ในความเป็นจริงในโหมดนี้ ASP.NET เป็นเพียงส่วนขยาย ISAPI (aspnet_isapi.dll) และตัวกรอง ISAPI (aspnet_filter.dll) IIS จะถือว่า ASP.NET เป็นปลั๊กอินภายนอกที่นำมาใช้ใน ISAPI และทำงานกับมันเหมือนกล่องดำ (และเมื่อจำเป็นต้องส่งคำขอไปยัง ASP.NET) ในโหมดนี้ ASP.NET ไม่แตกต่างจาก PHP หรือเทคโนโลยีอื่น ๆ สำหรับ IIS มากนัก

ในทางกลับกันโหมดรวมเป็นโหมดใหม่ใน IIS7 ที่ IIS ไปป์ไลน์ถูกรวมเข้าด้วยกันอย่างแน่นหนา (เช่นเดียวกับ) ไปป์ไลน์คำร้องขอ ASP.NET ASP.NET สามารถเห็นการร้องขอทุกอย่างที่มันต้องการและจัดการสิ่งต่าง ๆ ไปพร้อมกัน ASP.NET จะไม่ถือว่าเป็นปลั๊กอินภายนอกอีกต่อไป มันผสมผสานอย่างสมบูรณ์และรวมอยู่ใน IIS ในโหมดนี้HttpModuleโดยทั่วไปแล้วASP.NET จะมีพลังเกือบเท่าที่จะมีตัวกรอง ISAPI และ ASP.NET HttpHandlers ก็มีความสามารถเทียบเท่าเกือบเท่ากับที่ส่วนขยายของ ISAPI อาจมี ในโหมดนี้ ASP.NET นั้นเป็นส่วนหนึ่งของ IIS


8
บูรณาการช้ากว่าคลาสสิก?
Alex Nolasco

ฉันไม่แน่ใจว่าถูกต้องหรือไม่ที่จะบอกว่า asp.net เป็นส่วนหนึ่งของ IIS พวกเขาดูเหมือนผลิตภัณฑ์แยกต่างหาก (แม้ว่าจะรวมอยู่ด้วย) ฉันอาจจะผิด
Andrew Savinykh

@MehrdadAfshari การจัดการกับHttpModulesวิธีการ / เหตุการณ์ในiis7มีฟังก์ชั่นมากกว่าiis6หรือไม่? คุณอธิบายรายละเอียดเกี่ยวกับเรื่องนี้ได้ไหม?
Royi Namir

และเพื่อเพิ่มในโหมดบูรณาการไปป์ไลน์ทุกขั้นตอนในไปป์ไลน์คำขอถูกเปิดเผยเป็นเหตุการณ์ที่การแมปของตัวจัดการอาจถูกแทนที่ในแอปพลิเคชัน ตัวอย่างเช่นหนึ่งสามารถกำหนดทรัพยากรที่ฝังตัว HttpHandler สำหรับเส้นทางบางประเภทและแมปไปยังตัวจัดการที่กำหนดเองของคุณผ่านตัวจัดการเส้นทาง
Ren

1
คำตอบที่สมบูรณ์แบบสำหรับคำถามดังกล่าวควรอ้างอิงอย่างน้อยหนึ่งบทความของ Microsoft เช่นiis.net/learn/application-frameworks/
Lex Li

115

โหมดพูลแอ็พพลิเคชันแบบรวม

เมื่อพูลแอ็พพลิเคชันอยู่ในโหมดรวมคุณสามารถใช้ประโยชน์จากสถาปัตยกรรมการประมวลผลการร้องขอรวมของ IIS และ ASP.NET เมื่อกระบวนการของผู้ปฏิบัติงานในกลุ่มแอปพลิเคชันได้รับการร้องขอคำขอจะส่งผ่านรายการเหตุการณ์ที่สั่งซื้อ แต่ละเหตุการณ์เรียกใช้โมดูลเนทีฟและโมดูลที่ได้รับการจัดการเพื่อประมวลผลส่วนของคำขอและสร้างการตอบสนอง

มีประโยชน์หลายประการในการใช้พูลโปรแกรมในโหมดรวม ก่อนอื่นโมเดลการร้องขอการประมวลผลของ IIS และ ASP.NET จะถูกรวมเข้ากับโมเดลกระบวนการแบบรวม รุ่นนี้กำจัดขั้นตอนที่ทำซ้ำก่อนหน้านี้ใน IIS และ ASP.NET เช่นการรับรองความถูกต้อง นอกจากนี้โหมดรวมยังช่วยให้มีฟีเจอร์ที่มีการจัดการสำหรับเนื้อหาทุกประเภท

โหมดพูลแอ็พพลิเคชันแบบคลาสสิค

เมื่อกลุ่มแอพลิเคชันอยู่ในโหมดคลาสสิก IIS 7.0 จัดการการร้องขอเช่นเดียวกับในโหมดแยกกระบวนการของผู้ปฏิบัติงาน IIS 6.0 คำขอ ASP.NET จะทำตามขั้นตอนการประมวลผลดั้งเดิมใน IIS ก่อนจากนั้นจึงส่งไปยัง Aspnet_isapi.dll เพื่อประมวลผลรหัสที่ได้รับการจัดการในรันไทม์ที่ได้รับการจัดการ ในที่สุดคำขอจะถูกส่งกลับผ่าน IIS เพื่อส่งการตอบกลับ

การแยกโมเดลการร้องขอการประมวลผล IIS และ ASP.NET นี้ส่งผลให้เกิดการทำซ้ำขั้นตอนการประมวลผลบางอย่างเช่นการตรวจสอบสิทธิ์และการอนุญาต นอกจากนี้คุณสมบัติรหัสที่ได้รับการจัดการเช่นการรับรองความถูกต้องของฟอร์มจะมีให้เฉพาะกับแอปพลิเคชัน ASP.NET หรือแอปพลิเคชันที่คุณได้แมปสคริปต์คำขอทั้งหมดที่ต้องจัดการโดย aspnet_isapi.dll

ตรวจสอบให้แน่ใจว่าได้ทดสอบแอปพลิเคชันที่มีอยู่ของคุณสำหรับความเข้ากันได้ในโหมดรวมก่อนที่จะอัพเกรดสภาพแวดล้อมการผลิตเป็น IIS 7.0 และกำหนดแอปพลิเคชันให้กับแอพพลิเคชั่นพูลในโหมดรวม คุณควรเพิ่มแอปพลิเคชันให้กับกลุ่มแอปพลิเคชันในโหมดคลาสสิกหากแอปพลิเคชันไม่สามารถทำงานในโหมดรวมได้ ตัวอย่างเช่นแอปพลิเคชันของคุณอาจใช้โทเค็นการตรวจสอบความถูกต้องที่ส่งผ่านจาก IIS ไปยังรันไทม์ที่ได้รับการจัดการและเนื่องจากสถาปัตยกรรมใหม่ใน IIS 7.0 กระบวนการจึงหยุดแอปพลิเคชันของคุณ

นำมาจาก: ความแตกต่างระหว่าง DefaultAppPool และ Classic .NET AppPool ใน IIS7 คืออะไร

แหล่งต้นฉบับ: รู้เบื้องต้นเกี่ยวกับสถาปัตยกรรม IIS


28
ประโยคสำคัญในย่อหน้าสุดท้าย: "คุณควรเพิ่มแอปพลิเคชันในกลุ่มแอปพลิเคชันในโหมดคลาสสิกหากแอปพลิเคชันล้มเหลวในการทำงานในโหมดรวม"
DavidRR

6
@JsonStatham - หนึ่งในเหตุผลนี้คือโหมดรวมไม่สามารถใช้การเลียนแบบ ASP.NET (ไซต์> YourSite> IIS> การพิสูจน์ตัวตน) หากคุณมีไซต์อินทราเน็ตและใช้ Windows Authentication นี่เป็นข้อพิจารณาที่สำคัญ ลิงก์
user3308241

11

IIS 6.0 และรุ่นก่อนหน้า:

ASP.NET รวมเข้ากับ IIS ผ่านส่วนขยาย ISAPI, C API (การเขียนโปรแกรมด้วยภาษา C API) และเปิดเผยแอปพลิเคชันของตัวเองและรูปแบบการประมวลผลคำขอ

สิ่งนี้ได้เปิดเผยไปป์ไลน์ที่แยกจากกันสองเซิร์ฟเวอร์ (ร้องขอ / ตอบกลับ) หนึ่งตัวสำหรับตัวกรอง ISAPI ดั้งเดิมและคอมโพเนนต์ส่วนขยายและอีกส่วนหนึ่งสำหรับคอมโพเนนต์แอปพลิเคชันที่ได้รับการจัดการ คอมโพเนนต์ ASP.NET จะดำเนินการทั้งหมดภายในฟองอากาศของ ASP.NET ISAPI และ สำหรับการร้องขอที่แมปกับ ASP.NET ในการกำหนดค่าการแมป IIS สคริปต์เท่านั้น

คำขอไปยังประเภทเนื้อหาที่ไม่ใช่ของ ASP.NET: - รูปภาพ, ไฟล์ข้อความ, หน้า HTML และหน้า ASP ที่ใช้สคริปต์น้อยกว่าถูกประมวลผลโดย IIS หรือส่วนขยาย ISAPI อื่น ๆ และไม่สามารถมองเห็นได้กับ ASP.NET

ข้อ จำกัด ที่สำคัญของรุ่นนี้คือการให้บริการโดยโมดูล ASP.NET และรหัสแอปพลิเคชัน ASP.NET ที่กำหนดเองนั้นไม่พร้อมใช้งานสำหรับคำขอ ASP.NET ที่ไม่ใช่

แผนที่ SCRIPT คืออะไร

การแมปสคริปต์จะใช้เพื่อเชื่อมโยงส่วนขยายไฟล์กับตัวจัดการ ISAPI ที่ดำเนินการเมื่อมีการร้องขอประเภทไฟล์นั้น แมปสคริปต์ยังมีการตั้งค่าเพิ่มเติมที่ตรวจสอบว่ามีฟิสิคัลไฟล์ที่เชื่อมโยงกับคำขออยู่ก่อนที่จะอนุญาตให้ประมวลผลคำขอ

ตัวอย่างที่ดีสามารถ seen here

IIS 7 ขึ้นไป

IIS 7.0 ขึ้นไปได้รับการออกแบบใหม่ตั้งแต่ต้นจนจบเพื่อจัดหา ISAPI ที่ใช้ C ++ API ใหม่

IIS 7.0 และสูงกว่ารวมรันไทม์ของ ASP.NET เข้ากับฟังก์ชั่นการทำงานหลักของเว็บเซิร์ฟเวอร์โดยให้ขั้นตอนการประมวลผลคำร้องขอแบบรวม (เดี่ยว) ที่เปิดเผยทั้งส่วนประกอบดั้งเดิมและส่วนประกอบที่ได้รับการจัดการซึ่งเรียกว่าโมดูล (IHttpModules)

สิ่งนี้หมายความว่า IIS 7 จะประมวลผลคำขอที่มาถึงสำหรับประเภทเนื้อหาใด ๆ ทั้งที่มีNON ASP.NET Modules / native IIS modulesและASP.NET modulesให้การประมวลผลคำขอในทุกขั้นตอน นี่คือสาเหตุที่ทำให้ประเภทเนื้อหา NON ASP.NET (.html, ไฟล์สแตติก) สามารถจัดการได้โดยโมดูล NET .

  • คุณสามารถสร้างโมดูลที่มีการจัดการใหม่ ( IHttpModule) ที่มีความสามารถในการดำเนินการสำหรับเนื้อหาแอปพลิเคชันทั้งหมดและจัดหาชุดบริการประมวลผลคำขอที่เพิ่มประสิทธิภาพให้กับแอปพลิเคชันของคุณ
  • เพิ่มตัวจัดการที่จัดการใหม่ ( IHttpHandler)

5

ในโหมดคลาสสิก IIS ทำงานส่วนขยาย h ISAPI และตัวกรอง ISAPI โดยตรง และใช้สอง pipe pipe หนึ่งรายการสำหรับ native code และอื่น ๆ สำหรับ code ที่ได้รับการจัดการ คุณสามารถพูดได้ว่าในโหมดคลาสสิค IIS 7.x ทำงานเช่นเดียวกับ IIS 6 และคุณไม่ได้รับสิทธิพิเศษจากฟีเจอร์ IIS 7.x

ในโหมดรวม IIS และ ASP.Net นั้นมีการเชื่อมโยงกันอย่างแน่นหนาแล้วขึ้นอยู่กับ DLLs สองตัวบน Asp.net เช่นเดียวกับในโหมดคลาสสิค

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.