IIS Express 与 dotnet 运行 [重复]

Posted

技术标签:

【中文标题】IIS Express 与 dotnet 运行 [重复]【英文标题】:IIS Express vs dotnet run [duplicate] 【发布时间】:2020-05-28 12:43:27 【问题描述】:

其实我知道IIS Express是轻量级的开发服务器。另一方面,“dotnet run” 将应用程序作为控制台应用程序运行并将其绑定到随机端口。

但实际的区别是什么?我可以通过IIS Express"dotnet run" 启动大型企业应用程序,这两种情况都可以完美运行。

到目前为止,我看到的所有区别是IIS Express 将图标添加到任务栏,dotnet run 允许查看控制台输出。但这些都是细微的差别。 IIS Express如今如此普及应该是一些全球性的原因。

一些结构化可以在这里找到:ASP.NET Core launch settings: IIS Express, IIS, Project, Executable。但它仍然无法解释差异。

【问题讨论】:

最初您可以关注我的博客文章以了解差异,blog.lextudio.com/… 但是对于进程内托管(.NET Core 2.2),情况更加复杂。难怪很难找到合适的材料。 【参考方案1】:

dotnet run 将使用嵌入式 Kestrel 服务器。 IIS Express 将使用 IIS Express 作为反向代理,在后台调用 Kestrel。无论哪种情况,服务器都在托管您的应用程序。

您可以通过调整运行配置来切换本地服务器选择。 IIS Express 将使用...IIS Express。但是,如果您改为选择项目(在屏幕截图的情况下,它的标题为weatherapi),它将改用 Kestrel。您将看到弹出一个命令提示符,显示一些基本配置数据(假设您没有更改默认日志记录输出)。第一次运行时,您可能必须接受/安装 localhost TLS 证书,以免遇到 TLS 错误。

确认您正在使用哪个进程的一种方法是在 powershell 中调用get-process,以及iisexpressnameOfProject

来自文档的更多信息 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/?view=aspnetcore-3.1&tabs=windows

【讨论】:

谁能给我解释一下,你为什么要用一个而不是另一个? 我和上面的评论有同样的问题。我了解 IIS 需要在生产环境中反向代理到 Kestrel(Kestrel 缺少很多功能),但为什么 IIS Express 是 ASP.NET Core 组合的一部分?它似乎没有在 Kestrel 上添加任何内容。单个启动选项会更加清晰。 IIS / IIS Express 的存在早于 Kestrel 和 .NET Core 多年。关于为什么仍然有两个服务器层的一个很好的解释可以在这里找到:***.com/a/46878663/1424754

以上是关于IIS Express 与 dotnet 运行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

发布已在运行的 dotnet 应用程序

IIS Express错误http 404.17 - 未找到运行WCF服务

以管理员权限运行 IIS Express

该项目不知道如何运行配置文件 IIS Express。

什么是 Kestrel(与 IIS / Express 相比)

以编程方式确定代码是否在IIS Express下运行