Asp.net

Webapi、Webhost和Owin的關係

  • June 3, 2015

我只是想了解 webapi、webhost (iis) 和 owin 之間的關係。我會寫下我目前的理解,請你告訴我它是否正確。

  • Webapi與 MVC 不同,它是以獨立於主機的方式編寫的。這是在歐文之前的日子,但顯然他們預計歐文遲早會發生。主機獨立性主要是指 System.Web 在 Webapi 程式碼中的任何地方都沒有使用。System.Web 完全依賴於 IIS,沒有它就無法工作。這樣,Webapi 理論上可以託管在任何地方——一旦其他主機可用。
  • Webhost ( Microsoft.Owin.Host.SystemWeb, Microsoft.AspNet.WebApi.WebHost) 是更高級別的 API(如 Webapi)和 IIS 之間的一層。由於 Webapi 最初是獨立於主機的,因此需要一個中間層才能使其在特定主機上執行,例如 IIS。Webapi ( Microsoft.AspNet.WebApi.WebHost) 的 Web 主機提供了這一層。稍後還會有 Owin ( Microsoft.Owin.Host.SystemWeb) 的 Webhost 層,這將允許在 IIS 上託管任何與 Owin 兼容的東西。
  • 歐文是最後一個。它基本上提供了一種抽象,理論上允許在任何主機上託管任何與 Owin 兼容的應用程序,只要在 owin 和該主機之間存在一個層。Owin 帶有 Webhost ( Microsoft.Owin.Host.SystemWeb)(類似於 Webapi 帶有 Webhost),它允許 Owin 應用程序託管在 IIS 上。它還帶有自託管 ( Microsoft.Owin.SelfHost),允許 Owin 應用程序託管在任何執行檔中。就 Webapi 而言,Owin 還附帶了用於 Webapi ( Microsoft.AspNet.WebApi.Owin) 的 Owin 主機,它允許在 Owin 堆棧上執行 WebApi。

以上所有意味著在 IIS 上託管 Webapi 有兩種不同的方式。它可以在沒有 Owin 的情況下使用 Webapi WebHost 完成,也可以使用 Owin Host for Webapi 和 Webhost for Owin 完成。

Nuget 參考資料:

這種理解正確嗎?

您的理解通常是正確的,但 OWIN 的作用似乎被誤解了。更完整的時間表是:

  1. OWIN 標准開髮用於描述通用 .NET Web 界面,即 WSGI/Rake/Connect(2010 年首次送出)。

  2. ASP.NET WebAPI 是獨立於主機開發的,但與<https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/>一起發布。

  3. Katana 項目實現了幾個 OWIN 主機:

  4. <https://www.nuget.org/packages/Microsoft.Owin.SelfHost/>

  5. <https://www.nuget.org/packages/Microsoft.Owin.Host.HttpListener/>

  6. <https://www.nuget.org/packages/Microsoft.Owin.Host.IIS/>

  7. <https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/>

  8. 用於 OWIN 的 ASP.NET WebAPI 適配器已發布:https ://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin 。

你的總結:

以上所有意味著在 IIS 上託管 Webapi 有兩種不同的方式。它可以在沒有 Owin 的情況下使用 Webapi WebHost 完成,也可以使用 Owin Host for Webapi 和 Webhost for Owin 完成。

我將其重申為:

以上所有意味著一個人有兩種不同的方式來託管 WebAPI。它可以在沒有 Owin 的情況下使用WebAPI WebHost來完成,也可以使用 WebAPI 的OWIN 適配器和任何與 OWIN 兼容的主機來完成。IIS 上的託管選項是Microsoft.Owin.Host.IISMicrosoft.Owin.Host.SystemWeb。還提供了Microsoft.AspNet.WebApi.OwinSelfHost 。

引用自:https://stackoverflow.com/questions/30610064