【问题标题】:What is the best way to host an ASP.NET MVC6 Application托管 ASP.NET MVC6 应用程序的最佳方式是什么
【发布时间】:2015-02-11 01:37:13
【问题描述】:
如果我理解正确的话,ASP.NET vNext 的部分动机是减少开销。 MVC6 应用程序可以是自托管的。我的问题是托管 ASP.NET vNext 应用程序的最佳实践方式是什么。是否有类似于 WCF 激活服务的东西来监控服务的运行状况,或者是否有某种方法可以从应用程序中执行此操作?
【问题讨论】:
标签:
asp.net
asp.net-core-mvc
visual-studio-2015
【解决方案1】:
ASP.NET Core 1.1 答案
- 1.1 版本添加了 GZIP 压缩和响应缓存。
- Kestrel 仍未经过安全测试,不应在没有 IIS 或 NGINX 作为反向代理的情况下使用。这会在某个时候改变。
- Kestrel 仍然不支持 HTTP 2.0。
- 将 IIS 或 NGINX 与 MVC 6 一起使用比 MVC 5 慢。是的,MVC 6 应该更快,但前提是您自己使用 Kestrel。
ASP.NET Core 1.0 答案
IIS 或 NGINX 是迄今为止 ASP.NET MVC 6 应用程序的最佳宿主。下面是一个列表,如果没有 IIS 或 NGINX,如果没有大量额外的工作,您将无法获得这些功能。请注意,所有这些功能都需要在 web.config 文件中进行少量配置。
- Kestrel Web 服务器尚未经过强化和安全测试。它不应该暴露在互联网上......但是。
- Kestrel 不支持 HTTP 2.0。
- HTTP 请求的 GZIP 压缩以节省带宽和提高性能。仅此一项就足够了。
- 在 ASP.NET 之外处理错误。当您缺少 .dll 文件时会发生什么?那么IIS仍然会显示错误页面,您也可以自定义错误页面。
- 动态 IP 安全 - 在拒绝服务 (DoS) 攻击期间,会显示一个非常简单且小型的 403.501 或 403.502 Forbidden 静态错误页面。
【解决方案2】:
托管 ASP.NET MVC 6 的“最佳”方式当然是选择最符合您的应用需求的方式!但就建议而言,这可能没有太大帮助。
首先需要考虑应用的需求,比如:
- 是否需要跨平台运行?
- 需要健康管理吗?
- 是否需要使用现有的 IIS 模块?
- 它是否需要在另一个应用程序的上下文中运行?
- 是否需要使用 Windows 身份验证?
- 毫无疑问还有更多要求...
以下是各种托管选项及其优缺点的简要总结:
- IIS 可能是最知名的主机。它已经硬化了十多年。许多流行的模块可用于它,包括提供各种安全功能。 IIS 内置了对 Windows 身份验证、日志记录、应用程序预热、健康管理、远程管理和lots of other features 的支持。
- IIS Express 与 IIS 共享相同的代码库,但无需管理员权限即可运行。
-
Kestrel 是作为 ASP.NET 5 的一部分编写的跨平台 Web 服务器,目前最适合开发工作。它非常轻巧,既可以是好的(没有任何阻碍!)也可以是坏的(功能不多)。
- 自托管是您自己的域的主人。几乎所有事情都取决于您,包括弄清楚如果出现不可恢复的错误会发生什么。如果您需要在应用中托管服务器(例如,使用 Web 服务器托管应用直接使用的 UI 或服务的客户端应用),自托管是一个不错的选择。
托管 ASP.NET MVC 6 应用程序当然没有一种“最佳”方式,但肯定有许多解决方案可以满足各种需求。
在我对ASP.NET vNext is host agnostic, what does it deeply mean? 的回答中,我谈到了主机不可知论的其他几个方面。