Webapi,Webhost和Owin之间的关系

And*_*ykh 28 .net asp.net iis asp.net-web-api owin

我只是试图了解webapi,webhost(iis)和owin之间的关系.我会写下我目前的理解,并请你告诉我它是否正确.

  • 与MVC不同,Webapi是以独立于主机的方式编写的.这是在Owin之前的日子,但显然他们预计Owin迟早会发生.主机独立性主要意味着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)的Webhost 提供了这一层.稍后还将有Owin(Microsoft.Owin.Host.SystemWeb)的Webhost层,允许在IIS上托管Owin兼容的任何东西.
  • Owin绕过最后一个.它基本上提供了一个抽象,理论上允许在任何主机上托管任何Owin兼容的应用程序,只要owin和该主机之间有一个层.Owin附带Microsoft.Owin.Host.SystemWeb了Webhost ()(类似于Webapi带来的Webhost),允许Owin应用程序在IIS上托管.它还带有自托管(Microsoft.Owin.SelfHost),允许Owin应用程序托管在任何可执行文件中.就Webapi而言,Owin还为Owap主机提供了Webapi(Microsoft.AspNet.WebApi.Owin),允许在Owin堆栈上运行WebApi.

以上所有意味着一个人有两种不同的方式在IIS上托管Webapi.它可以在没有Owin的情况下使用Webapi WebHost完成,也可以使用Owin Host for Webapi和Webhost for Owin完成.

Nuget参考:

这种理解是否正确?

dah*_*byk 16

你的理解通常是正确的,但OWIN的作用似乎被误解了.更完整的时间表是:

  1. OWIN标准开发用于描述通用.NET Web界面,即WSGI/Rake/Connect(2010年首次提交).
  2. ASP.NET WebAPI是独立于主机开发的,但随https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/一起发布.
  3. Katana Project实现了几个OWIN主机:
    1. https://www.nuget.org/packages/Microsoft.Owin.SelfHost/
    2. https://www.nuget.org/packages/Microsoft.Owin.Host.HttpListener/
    3. https://www.nuget.org/packages/Microsoft.Owin.Host.IIS/
    4. https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/
  4. 发布了针对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完成,也可以使用适用于WebAPIOWIN适配器和任何与OWIN兼容的主机完成.IIS上的托管选项是Microsoft.Owin.Host.IISMicrosoft.Owin.Host.SystemWeb.还提供了Microsoft.AspNet.WebApi.OwinSelfHost.

  • 我要补充的唯一警告是,使用Microsoft.AspNet.WebApi.Owin在IIS中尝试和托管是错误的*即使大多数示例使用它 - 这仅适用于自托管.请参阅http://stackoverflow.com/questions/33402654/web-api-with-owin-throws-objectdisposedexception-for-httpmessageinvoker以及Katana项目的基本答案http://aspnetwebstack.codeplex.com/workitem/2091 (2认同)