c# – 生产中的ASP.NET核心应用程序的实例化
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |