ASP.NET Web API 2托管差异

Mac*_*akM 5 c# asp.net asp.net-web-api2

我发现Web API 2可以使用两种技术托管:

  • A)IIS - Web应用程序
  • B)OWIN - 控制台应用程序

但我找不到的是它们之间的区别.我为什么要使用一个而不是另一个?有什么优点或缺点吗?

Aar*_*nLS 10

请注意,IIS和OWIN不是互斥的.您可以在IIS中托管OWIN应用程序:https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana#host-owin -in-IIS

所以从这里开始假设您在询问IIS托管应用程序与自托管OWIN应用程序之间的区别(因为您提到了控制台应用程序).

IIS

  • IIS功能更全面,更成熟.IIS中已经内置了许多功能.
  • IIS具有广泛的集成,例如管理接口.
  • IIS是经验丰富的开发人员和管理员所熟知的,因此利用IIS意味着您可以确保您使用的IIS功能由经验丰富的员工记录和理解.
  • IIS可以轻松地在域上的单个端口(例如端口80)后面托管多个站点.当您托管多个Web应用程序时,它们都可以在端口80上访问,并且IIS可以根据域或URL将请求路由到相应的应用程序.

OWIN

  • 默认情况下,OWIN自托管不能在单个端口上托管多个站点.为每个进程分配一个端口.通常,自托管Web应用程序是其自己的进程(例如控制台应用程序),因此是已分配的端口.您可以利用IIS或其他Web主机应用程序将代理请求通过端口80转发到您的众多自托管应用程序,并根据URL等内容对其进行路由.或者你可以写自己的端口路由器.
  • 如上所述,您不能在与IIS相同的服务器上拥有自托管应用程序,并且都响应端口80.需要在不同的端口.再次,IIS可以拥有80和反向代理到自托管OWIN应用程序所在的任何端口.
  • OWIN使您可以更好地控制请求/响应管道.ASP.NET中通过请求处理程序和模块可以实现很多功能,但是在某些情况下难以覆盖的行为存在一些限制或枯萎.OWIN打开处理管道,为您提供更多控制.
  • 有些事情你想要完成,你可以很容易地找到处理程序和模块,但可能还没有等效的OWIN中间件实现.许多常见任务随时可用,许多维护良好的开源库已经支持OWIN.所以这主要适用于不太常见的边缘情况.
  • 自托管使您无需在计算机上安装IIS.如果遵循某些准则,您可以将正确构建的OWIN应用程序部署到Linux,并通过Linux Web主机(如Apache)反向代理请求.OWIN应用程序可以由Kestrel自行托管.

显然不是一个完整的清单.

我认为在IIS中使用OWIN可能是明智之举.这是因为OWIN正在迅速成为标准.我认为对于大多数了解它的人来说,如果给出选择,他们会每次为新项目选择OWIN,因为与遗留项目没有冲突.由于IIS是一个非常成熟,安全,功能齐全且稳定的Web托管应用程序,因此我们选择在IIS中托管我们的OWIN Web应用程序.这也意味着Web应用程序将经过测试,并与基于IIS的云服务(如Azure App Service)兼容.