我目前正在阅读有关asp.net core 的文档。但是这个关于服务器的页面让我有点困惑。据我了解,ASP.NET Core 应用程序只是启动 http 服务器的控制台应用程序。像 IIS 这样的 http 服务器可以用作反向代理。
我认为这是出于性能原因。为什么我在开发过程中要在本地运行 IIS Express?不是说我需要在那里有真正的表现吗?是因为IIS功能更丰富吗?哪些功能在 IIS 中效果更好?
为什么我在开发过程中要在本地运行 IIS Express?
纯粹的便利。 IIS Express 随 Visual Studio 一起提供。 F5 或 ^F5 和 IIS Express 启动。
您在开发中运行的服务器取决于您计划在生产中部署的服务器。
如果您要将 ASP.NET Core 应用程序部署到 Linux,或者计划将 Kestrel 与 nginx 等反向代理一起使用,则应该在开发过程中在本地使用 Kestrel 进行测试。
如果您要部署到 Windows 计算机和 IIS,则应在开发过程中在本地使用 IIS Express 进行测试。
对于简单的应用程序,我发现在 Kestrel 或 IIS Express 上本地运行时,ASP.NET Core 功能没有太大差异。我最感兴趣的是测试以确保它与我计划部署到的服务器兼容。
我想8年后,是时候丰富我的评论“还应该提到IIS Express已经存在很多年了,真的没有必要在没有充分理由的情况下用另一件事让用户感到惊讶”以得到完整的答案。但它又与 RickAndMSFT 的答案类似。
微软过去在VS Web项目模板(经典的ASP/ASP.NET)中强调很多IIS和Windows。因此,在启用 IIS Express 的情况下创建 ASP.NET 项目已经有十多年了(IIS Express 一发布并成为 VS 2010 中的默认设置)。
尽管 .NET Core 引入了跨平台支持,但项目模板仍然使用 IIS Express 作为默认启动配置文件。这非常方便,因为开发人员倾向于使用 VS for Windows,而 IIS Express/本地 IIS 最有可能作为测试和部署的 Web 服务器。
微软甚至通过 IIS Express 附带 ASP.NET Core 模块带来了更多便利。但是你需要手动安装 .NET 服务器托管包来将 ASP.NET Core 模块绑定到本地 IIS,这导致了相当多的 IIS 500.19 错误和痛苦。
当 ASP.NET Core 6 发布时,事情终于发生了变化,因此新的 ASP.NET Core 项目不再默认使用 IIS Express 启动配置文件,而是使用 Kestrel 启动配置文件,
所有新的 dotnet Web 项目的默认启动配置文件是 Kestrel。启动 Kestrel 的速度显着加快,并在开发应用程序时提供响应更快的体验。
IIS Express 仍可用作 Windows 身份验证或端口共享等方案的启动配置文件。