นี่คือความเข้าใจของฉันว่าการเริ่มต้น / การโฮสต์เว็บแอปพลิเคชันมีวิวัฒนาการอย่างไร สรุปเล็ก ๆ :
1. Classic ASP.NET:เขียนเฉพาะรหัสแอปพลิเคชั่นที่จะทำงานในขั้นตอนสุดท้ายของขั้นตอน IIS บังคับ
2. ASP.NET ด้วย OWIN:กำหนดค่าเว็บเซิร์ฟเวอร์. NET และเขียนรหัสแอปพลิเคชันของคุณ ไม่เชื่อมต่อกับ IIS โดยตรงอีกต่อไปดังนั้นคุณจะไม่ถูกบังคับให้ใช้อีกต่อไป
3. ASP.NET Core:กำหนดค่าทั้งโฮสต์และเว็บเซิร์ฟเวอร์เพื่อใช้และเขียนรหัสแอปพลิเคชันของคุณ ไม่บังคับให้ใช้เว็บเซิร์ฟเวอร์. NET อีกต่อไปหากคุณกำหนดเป้าหมายเป็น. NET Core แทนที่จะเป็น. NET Framework แบบเต็ม
ตอนนี้ฉันจะอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานและคลาสที่ใช้ในการเริ่มต้นแอปพลิเคชัน:
ASP.NET คลาสสิก
แอปพลิเคชัน ASP.NET คลาสสิคมีGlobal.asax
ไฟล์เป็นจุดเข้าใช้งาน แอปพลิเคชันเหล่านี้สามารถทำงานใน IIS และรหัสของคุณจะได้รับการดำเนินการในตอนท้ายของไพพ์ไลน์ IIS (ดังนั้น IIS จะรับผิดชอบ CORS, การพิสูจน์ตัวตน ... ก่อนที่โค้ดของคุณจะรัน) ตั้งแต่ IIS 7 คุณสามารถเรียกใช้แอปพลิเคชันของคุณในโหมดรวมซึ่งรวมรันไทม์ ASP.NET เข้ากับ IIS สิ่งนี้ทำให้โค้ดของคุณสามารถกำหนดค่าการทำงานที่ไม่สามารถทำได้ก่อน (หรือเฉพาะใน IIS เอง) เช่นurl rewritingในApplication_Start
กรณีที่Global.asax
ไฟล์ของคุณหรือใช้<system.webserver>
ส่วนใหม่ในweb.config
ไฟล์ของคุณ
ASP.NET ด้วย OWIN
ก่อนอื่นOWINไม่ใช่ห้องสมุด แต่เป็นสเปคที่เว็บเซิร์ฟเวอร์. NET (ตัวอย่างเช่น IIS) โต้ตอบกับเว็บแอพพลิเคชัน Microsoft เองก็มีการติดตั้ง OWIN ที่เรียกว่าproject Katana (เผยแพร่ผ่านแพ็คเกจ NuGet ที่แตกต่างกัน) การใช้งานนี้ให้IAppBuilder
อินเทอร์เฟซที่คุณพบในStartup
คลาสและส่วนประกอบมิดเดิลแวร์ OWIN (OMC) ที่จัดทำโดย Microsoft การใช้IAppBuilder
โดยทั่วไปคุณจะเขียนมิดเดิลแวร์ในแบบ plug-and-play เพื่อสร้างไปป์ไลน์สำหรับเว็บเซิร์ฟเวอร์ (นอกเหนือจากเฉพาะไปป์ไลน์ ASP.NET ใน IIS7 + ตามจุดด้านบน) แทนที่จะเชื่อมโยงกับไพพ์ของ IIS (แต่ตอนนี้คุณใช้ คอมโพเนนต์มิดเดิลแวร์สำหรับ CORS คอมโพเนนต์มิดเดิลแวร์สำหรับการพิสูจน์ตัวตน ... ) ด้วยเหตุนี้แอปพลิเคชันของคุณจึงไม่ได้เชื่อมต่อกับ IIS อีกต่อไปโดยเฉพาะและคุณสามารถเรียกใช้ได้บน. NET Webserver ใด ๆ ตัวอย่างเช่น:
- OwinHostแพคเกจสามารถใช้เพื่อตนเองโฮสต์แอพลิเคชันของคุณกับเว็บเซิร์ฟเวอร์ Katana
- Microsoft.Owin.Host.SystemWebแพคเกจจะใช้ในการเป็นเจ้าภาพการประยุกต์ใช้ OWIN คุณใน IIS7 + ในโหมดแบบบูรณาการโดยสมัครมิดเดิลแวร์ของคุณไปยังเหตุการณ์ที่อายุการใช้งานที่ถูกต้องภายใน
สิ่งที่ทำให้ทุกอย่างเกิดความสับสนก็Global.asax
คือยังคงได้รับการสนับสนุนพร้อมกับStartup
คลาสOWIN ในขณะที่พวกเขาทั้งสองสามารถทำสิ่งที่คล้ายกัน ตัวอย่างเช่นคุณอาจดำเนินการในล ธGlobal.asax
และการตรวจสอบโดยใช้ตัวกลาง OWIN ซึ่งจะกลายเป็นจริงทำให้เกิดความสับสน
กฎง่ายๆของฉันคือการลบGlobal.asax
ไฟล์ทั้งหมดเข้าด้วยกันเพื่อใช้Startup
เมื่อใดก็ตามที่ฉันต้องการเพิ่ม OWIN
แกน ASP.NET
ASP.NET Core เป็นวิวัฒนาการต่อไปและตอนนี้คุณสามารถกำหนดเป้าหมายเป็น. NET Core หรือ. NET Framework แบบเต็ม เมื่อคุณกำหนดเป้าหมาย. NET Core คุณสามารถเรียกใช้แอปพลิเคชันของคุณบนโฮสต์ใดก็ได้ที่รองรับ. NET Standard ซึ่งหมายความว่าคุณไม่ได้ถูก จำกัด ให้ใช้เว็บเซิร์ฟเวอร์. NET (เหมือนในจุดก่อนหน้า) อีกต่อไป แต่สามารถโฮสต์แอปพลิเคชันของคุณในคอนเทนเนอร์ Docker, เว็บเซิร์ฟเวอร์ linux, IIS ...
จุดเริ่มต้นสำหรับแอปพลิเคชันเว็บ ASP.NET Core คือProgram.cs
ไฟล์ มีคุณกำหนดค่าโฮสต์ของคุณและระบุStartup
คลาสของคุณที่คุณกำหนดค่าไปป์ไลน์ของคุณอีกครั้ง ใช้ OWIN (โดยใช้IAppBuilder.UseOwin
วิธีขยาย) เป็นตัวเลือก แต่การสนับสนุนอย่างเต็มที่
AreaRegistration.RegisterAllAreas();
Application_Start
ก่อให้เกิดข้อผิดพลาดสำหรับฉันเป็นวิธีการนี้ไม่อนุญาตให้นำมาใช้ในระหว่างการเริ่มต้นเช่นนี้เฉพาะใน อย่างไรก็ตามแอปพลิเคชันของฉันเป็น API และเห็นได้ชัดว่าวิธีการนี้มีประโยชน์สำหรับแอปพลิเคชัน MVC เท่านั้น: stackoverflow.com/questions/18404637/…