Webapi,Webhost和Owin之间的关系

时间:2015-06-03 02:56:45

标签: asp.net .net iis asp.net-web-api owin

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

  • Webapi ,与MVC不同,是以独立于主机的方式编写的。这是在Owin之前的日子,但显然他们预计Owin迟早会发生。主机独立性主要意味着System.Web不在Webapi代码中的任何地方使用。 System.Web完全依赖于IIS,没有它就无法工作。这样,Webapi理论上可以在任何地方托管 - 一旦其他主机可用。
  • Webhost Microsoft.Owin.Host.SystemWebMicrosoft.AspNet.WebApi.WebHost)是更高级API(例如Webapi)和IIS之间的层。由于Webapi最初是独立于主机的,因此需要一个中间层来使其在特定主机(如IIS)上运行。 Webapi的Webhost(Microsoft.AspNet.WebApi.WebHost)提供了这一层。稍后还将有Owin的Webhost层(Microsoft.Owin.Host.SystemWeb),这将允许在IIS上托管Owin兼容的任何内容。
  • Owin 绕过最后。它基本上提供了一个抽象,理论上允许在任何主机上托管任何Owin兼容的应用程序,只要owin和该主机之间有一个层。 Owin带来了Webhost(Microsoft.Owin.Host.SystemWeb)(类似于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参考:

这种理解是否正确?

1 个答案:

答案 0 :(得分:15)

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

  1. OWIN Standard开发用于描述通用的.NET Web界面,即WSGI / Rake / Connect(first commit in 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
  5. 您的摘要:

      

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

    我会重申:

    以上所有意味着有一种托管WebAPI的两种不同方式。可以使用WebAPI WebHost在没有Owin的情况下完成,也可以使用OWIN adapter for WebAPI和任何与OWIN兼容的主机完成。 IIS上的托管选项是Microsoft.Owin.Host.IISMicrosoft.Owin.Host.SystemWeb。还提供了Microsoft.AspNet.WebApi.OwinSelfHost