ฉันต้องการเสนอคำตอบอื่นด้วยประวัติบางอย่างเพื่อให้คุณเข้าใจว่าทำไม Kestrel ถึงแม้ว่าคุณจะใช้ Windows และ IIS เท่านั้น
ที่จุดเริ่มต้นของการพัฒนา ASP.NET ก่อนปี 2000 อย่างชัดเจน Microsoft สร้างสองส่วนเพื่อโฮสต์แอพ ASP.NET WebForms
- Cassini ต่อมากลายเป็น ASP.NET Development Server ใน Visual Studio มันเป็นเว็บเซิร์ฟเวอร์การจัดการอย่างเต็มที่เขียนใน C #
HttpListener
อยู่บนพื้นฐานของ แน่นอนเนื่องจากเป็นการพัฒนาเท่านั้นคุณลักษณะมากมายจึงไม่เคยถูกนำมาใช้ เนื่องจาก Microsoft ทำให้ซอร์สโค้ดของ Cassini พร้อมใช้งานสำหรับสาธารณะจึงมีบุคคลที่สามที่แยกฐานรหัสและเพิ่มคุณสมบัติเพิ่มเติมซึ่งเริ่มตระกูล Cassini
- การสนับสนุน ASP.NET บน IIS (การแก้ไข 1) เนื่องจาก IIS เป็น 4.0 และ 5.0 / 5.1 ในขณะนั้นซึ่งไม่มีอะไรเหมือนกับพูลโปรแกรมประยุกต์ ASP.NET จึงมีกระบวนการทำงานของตนเอง (
aspnet_wp.exe
)
ดังนั้นในการพัฒนาเว็บแอปคุณใช้ Cassini และการปรับใช้คุณใช้ IIS
การแนะนำของพูลโปรแกรมประยุกต์ใน IIS 6 ต้องเปลี่ยนแปลงบางอย่างในด้าน ASP.NET จึงกลายเป็นสิ่งล้าสมัยและถูกแทนที่ด้วยaspnet_wp.exe
aspnet_isapi.dll
ที่สามารถมองเห็นการสนับสนุน ASP.NET บน IIS การแก้ไข 2. ปพลิเคชันดังนั้น ASP.NET w3wp.exe
จะเป็นเจ้าภาพในกระบวนการปฏิบัติงาน
การแนะนำของท่อรวมใน IIS 7 ขึ้นไปการเปลี่ยนแปลงเพิ่มเติมจำเป็นซึ่งถูกแทนที่ด้วยaspnet_isapi.dll
webengine4.dll
ที่สามารถเห็นได้ว่าเป็นการสนับสนุน ASP.NET ในการแก้ไข IIS 3 ท่อส่ง ASP.NET และ IIS จะรวมเป็นหนึ่งเดียว
คุณสามารถเห็น ASP.NET มีความซับซ้อนมากขึ้นและผนวกรวมกับ IIS อย่างแน่นหนาดังนั้น Cassini จึงเริ่มแสดงอายุของมันและค่อยๆถูกแทนที่ด้วย IIS Express (โหมดผู้ใช้ดังกล่าว IIS)
ดังนั้นในหลายกรณีเมื่อผู้คนตำหนิว่า IIS ช้าพวกเขาควรตำหนิ ASP.NET จริง IIS เองที่ไม่มี ASP.NET นั้นค่อนข้างเร็วและเสถียรในขณะที่ ASP.NET ไม่ได้รับการพัฒนาโดยคำนึงถึงประสิทธิภาพที่เพียงพอ (เนื่องจาก WebForms เน้นที่การผลิตและ RAD ค่อนข้างมาก)
จากนั้นในเดือนพฤศจิกายน 2014, ASP.NET 5 (ภายหลังเปลี่ยนชื่อเป็น ASP.NET Core) ได้ประกาศและกลายเป็นเทคโนโลยีข้ามแพลตฟอร์ม เห็นได้ชัดว่า Microsoft ต้องการการออกแบบใหม่เพื่อรองรับ Windows, macOS และ Linux โดยที่เว็บเซิร์ฟเวอร์หลักทั้งหมดควรพิจารณา nginx / Apache (หรือเว็บเซิร์ฟเวอร์อื่น ๆ ) นอกเหนือจาก IIS
ฉันคิดว่าหลายคนคงเห็นด้วยว่า Microsoft เรียนรู้ค่อนข้างมากจาก NodeJS จากนั้นออกแบบและพัฒนา Kestrel (โดยlibuv
เริ่มแรก แต่อาจจะเปลี่ยนไปใช้เทคโนโลยีอื่นเร็ว ๆ นี้) มันเป็นเว็บเซิร์ฟเวอร์ที่มีน้ำหนักเบาอย่าง Cassini ในตอนแรก แต่มีการเพิ่มคุณสมบัติเพิ่มเติมในภายหลัง (เช่นคำตอบอื่น ๆ ที่แสดงความคิดเห็นคุณสมบัติอื่น ๆ อีกมากมายดังนั้นจึงสามารถใช้เป็นเว็บเซิร์ฟเวอร์แบบเต็มได้) แม้ว่าจะมีการจัดการอย่างเต็มที่ (มีการอ้างอิงในตัวเองอยู่แล้ว) แต่มันก็ไม่ใช่เว็บเซิร์ฟเวอร์ของเล่นอย่าง Cassini
ถ้าอย่างนั้นทำไมคุณถึงใช้ Kestrel ไม่ได้? ทำไมต้องใช้ IIS Express และอาจเป็น IIS, nginx หรือ Apache นั่นเป็นผลมาจากการฝึกฝนอินเทอร์เน็ตในปัจจุบัน เว็บไซต์ส่วนใหญ่ใช้พร็อกซีย้อนกลับเพื่อรับคำขอจากเว็บเบราว์เซอร์ของคุณแล้วส่งต่อไปยังเซิร์ฟเวอร์แอปพลิเคชันในพื้นหลัง
- IIS Express / IIS / nginx / Apache เป็นพร็อกซีเซิร์ฟเวอร์ย้อนกลับ
- Kestrel / NodeJS / Tomcat เป็นต้นเป็นแอพพลิเคชันเซิร์ฟเวอร์
คำตอบอื่นแสดงลิงก์ไปยังเอกสารของ Microsoft แล้วดังนั้นคุณสามารถดูได้
Microsoft พัฒนา HttpPlatformHandler เริ่มแรกเพื่อให้ IIS เป็น reverse proxy ที่ดีพอสำหรับ Java / Python และอื่น ๆ ดังนั้นจึงวางแผนที่จะใช้สำหรับ ASP.NET Core ปัญหาเริ่มปรากฏขึ้นระหว่างการพัฒนาดังนั้นภายหลัง Microsoft ได้สร้าง ASP.NET Core Module สำหรับ ASP.NET Core โดยเฉพาะ นั่นคือการสนับสนุน ASP.NET ใน IIS revision 4
เริ่มต้นจาก ASP.NET Core 2.2 โมดูล ASP.NET Core สำหรับ IIS (รุ่น 2) สามารถโฮสต์สภาพแวดล้อม. NET Core ภายในกระบวนการผู้ปฏิบัติงาน IIS ( w3wp.exe
) ค่อนข้างคล้ายกับ ASP.NET 2.x / 4.x โหมดนี้จะเรียกว่า"IIS ในกระบวนการโฮสติ้ง" มันถือได้ว่าเป็นการสนับสนุน ASP.NET ใน IIS revision 5
ค่อนข้างยาว แต่ฉันหวังว่าฉันจะนำทุกอย่างที่จำเป็นมารวมกันและคุณสนุกกับการอ่าน