加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:26:04 所属栏目:百科 来源:网络整理
导读:ASP.NET Core从Main方法开始执行,该方法位于Program.cs文件中的Program类中.这构建了一个Web托管环境,并告诉Web主机开始运行.然后,有startup.cs文件. 在开发.NET Core Web应用程序时,我必须在本地构建它(例如,通过Ctrl-F5).这样做时,Main方法正在运行.每次下
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=".logsstdout" />
  </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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读