Azure 上的 ASP.NET WebAPI 自托管 : feature loss by avoiding IIS?

标签 asp.net asp.net-web-api self-hosting

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/

相关文章:

c# - 使用 asp.net 的 SQL Server View

javascript - ASP.NET 中多个 JavaScript block 的性能影响?

c# - DelegatingHandler 设置 CurrentPrincipal

c# - 在 winforms 或 wpf 上托管的 Tcp wcf 服务挂起

c# - SignalR 自托管 Windows 服务,监听消息

asp.net - IIS 7.5 中的 URL 重写导致内部服务器错误

jquery - 在 PageMethod (asp.net) 中设置 session

c# - 如何使用 Android Xamarin 从 WebApi 获取数据?

c# - 我可以在 C# 中返回一个匿名对象吗

mono - 服务栈 : fastcgi-mono-server4 vs self-hosting