当前位置 : 主页 > 编程语言 > c语言 >

c# – 生产中的ASP.NET核心应用程序的实例化

来源:互联网 收集:自由互联 发布时间:2021-06-25
ASP.NET Core从Main方法开始执行,该方法位于Program.cs文件中的Program类中.这构建了一个Web托管环境,并告诉Web主机开始运行.然后,有startup.cs文件. 在开发.NET Core Web应用程序时,我必须在本地构建
ASP.NET Core从Main方法开始执行,该方法位于Program.cs文件中的Program类中.这构建了一个Web托管环境,并告诉Web主机开始运行.然后,有startup.cs文件.

在开发.NET Core Web应用程序时,我必须在本地构建它(例如,通过Ctrl-F5).这样做时,Main方法正在运行.每次下次我想打开我的网络应用程序时,鉴于IIS Express已经启动,我只是在写http://localhost:65040.通过这样做,Main方法不再运行,但一切正常(路由等..).所以,我有以下问题:

.NET Core如何知道在接收上述Http请求(http://localhost:65040)后该怎么做?例如,它是如何实现路由的

app.UseMvc(routes =>
{
    app.UseMvcWithDefaultRoute();
})

在Startup.cs中没有再次运行?没有必要,因为IIS已经被告知了?

如果上述想法是正确的,那么部署中究竟发生了什么?然后我们的Http请求永远不会触发program.cs和startup.cs.那么,远程Web服务器以哪种方式被告知如何实现路由等?

无论您选择ASP.Net核心应用程序(IIS还是通过Kestrel进行自托管),在宿主进程启动期间,方法Program.Main(),Startup.ConfigureServices()和Startup.Configure()都只执行一次.

很明显,当您使用Kestrel Web服务器启动exe文件时,会执行Program.Main().然而,在IIS中托管时是否实际调用它可能并不明显.实际上是这样的.当ASP.Net核心应用程序与IIS集成时,它通常由dotnet.exe运行程序执行(它也可以配置应用程序.exe文件的启动).您可以在添加应用程序期间创建的web.config中进行检查:

<configuration>
  <system.webServer>
    <!-- ... -->
    <aspNetCore processPath="dotnet" arguments=".\TestMvcApplication.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

所以它与使用命令dotnet.exe TestMvcApplication.dll运行应用程序时基本相同.在这种情况下执行Program.Main(),后面是启动方法.

如果没有基本构建Web主机的Main()方法,ASP.Net Core应用程序就无法运行.

当您触发后续查询时,它们由同一主机应用程序处理(我的意思是这里的Windows进程相同). ASP.Net Core所需的所有配置(如路由,中间件,服务等)已经在此过程中连接.这就是ASP.Net Core能够处理请求的原因.

我希望这是你的问题的答案.以下是一些有用的有用链接:

Hosting in ASP.NET Core

Host ASP.NET Core on Windows with IIS

Application startup in ASP.NET Core

网友评论