我正在使用Visual Studio 2017开发ASP.NET Core web application
。在发布项目后(例如在Azure中),我知道Main()
中的Program.cs
方法仅被调用非常第一次我们向相应的服务器发送Http请求。实际上,这是应用程序启动的时候。每个后续请求都不会调用上述方法。我对上述内容有一些疑问:
dotnet <app_name>.dll
。 我是对的吗??dotnet
命令?部署是否关心并将相应的文件复制到服务器? 答案 0 :(得分:3)
我的猜测是,启动实际上正在运行
dotnet <app_name>.dll
。我是对的吗?
是的,你是对的。 IIS具有ASP.NET Core Module (ANCM),它负责将来自IIS的请求代理到运行Kestrel的后端ASP.NET Core应用程序。所以是的,实际上它在应用程序启动时会在后台调用dotnet <your_app>.dll
并且恰好在那时调用Main
方法。启动进程后,IIS只会将传入的请求代理到它。
后续请求如何知道应用程序已经启动?他们通知了哪种机制?
不确定100%,但我可以猜测ANCM尝试通过HTTP连接到ASP.NET核心应用程序,如果远程应用程序没有响应,只需尝试再次使用dotnet <your_app>.dll
运行它
远程服务器如何知道
dotnet
命令?部署是否关心并将相应的文件复制到服务器?
是。通过运行dotnet publish -o <publish_folder>
发布ASP.NET核心应用程序时,请注意在发布时自动创建的web.config
文件。此文件用于配置ANCM,并为其提供有关<your_app>.dll
和dotnet
命令的信息。
这将改变(确保向前和向后兼容性)与ASP.NET Core 2.1。有关更多信息,请查看ASP.NET Core 2.1.0-preview1: Improvements to IIS hosting