ASP.NET WebAPI 可以托管在 IIS 中(作为 Web 角色),也可以自行托管(作为辅助角色)
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
上面让我想起了 Node.JS。不管怎样,我试图列出这两种方法之间的所有技术权衡。我并不是在寻找关于您喜欢哪种权衡的意见 - 只是从技术角度来看这些权衡是什么。现在,我发现在实际 API 调用中,自托管模式下每个 API 调用的响应时间提高了约 8%(=Azure SQL + API 调用背后的繁重数字运算)。然而,我担心抛弃 IIS 将来会反过来给我们带来麻烦。
那么,在采用 WebAPI 自托管路线时避免使用 IIS 时会损失哪些主要权衡或功能?
最佳答案
- 您将失去 IIS 的所有功能(日志记录、应用程序池扩展、网站的限制/配置)...您必须自己构建您想要的每一项功能
- HttpContext?你会失去它,因为 ASP.NET 为你提供了它。所以,我可以看到,身份验证之类的事情变得更加困难
- Web部署?你会失去它
- IIS 在 IIS 8 中提供了一些关于处理请求和预热服务的不错的特定功能
这实际上取决于您的应用程序。您必须重写您需要的每个功能。 Node.js 提供的模块可以执行 Nginx 服务器所没有的功能(Express)...除了(事件循环异步架构)之外,这就是它更快的原因。
我知道这不是您问题的一部分,但您提到了 8% 的性能增益...该增益是因为您没有涉及 IIS 管道。当您编写自己的代码来模仿您失去的 IIS 功能时,您最终将失去该性能
您尝试过 Windows 2008 R2/IIS 8 吗?其中包括相对 IIS 7.x 的“免费”性能提升: http://blog.bitdiff.com/2012/06/performance-comparison-iis-75-and-iis-8.html
关于Azure 上的 ASP.NET WebAPI 自托管 : feature loss by avoiding IIS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387005/