怎么一个ASP。 NET核心Web应用程序已启动

时间:2018-03-12 12:23:03

标签: c# asp.net-core

我正在使用Visual Studio 2017开发ASP.NET Core web application。在发布项目后(例如在Azure中),我知道Main()中的Program.cs方法仅被调用非常第一次我们向相应的服务器发送Http请求。实际上,这是应用程序启动的时候。每个后续请求都不会调用上述方法。我对上述内容有一些疑问:

  • 我的猜测是,启动实际上正在运行dotnet <app_name>.dll我是对的吗?
  • 后续请求如何知道应用程序已经启动?他们通知了哪种机制?
  • 远程服务器如何知道dotnet命令?部署是否关心并将相应的文件复制到服务器?

1 个答案:

答案 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>.dlldotnet命令的信息。

这将改变(确保向前和向后兼容性)与ASP.NET Core 2.1。有关更多信息,请查看ASP.NET Core 2.1.0-preview1: Improvements to IIS hosting