ASP.NET Core 从Main位于文件Program class内部的方法开始执行Program.cs。这将构建一个 Web 托管环境并告诉该 Web 主机开始运行。然后,有startup.cs文件。
在开发 .NET Core Web 应用程序时,我必须在本地构建它(例如,通过 Ctrl-F5)。这样做时,Main方法正在运行。每次我想打开我的 Web 应用程序时,鉴于 IIS Express 已经启动,我只是在写,例如http://localhost:65040。通过这样做,Main方法不会再次运行,但一切正常(路由等)。所以,我有以下问题:
.NET Core 如何知道在接收到上述 Http 请求 ( http://localhost:65040 ) 后该做什么?例如,它是如何实现路由的,因为
app.UseMvc(routes =>
{
app.UseMvcWithDefaultRoute();
})
Run Code Online (Sandbox Code Playgroud)
inStartup.cs是不是又跑了?There is no need for that because IIS has already been informed?
如果上述想法是正确的,究竟发生了deployment什么?然后我们的 Http 请求永远不会触发program.cs和startup.cs。那么,远程 Web 服务器以何种方式被告知如何实现路由等?
无论托管您选择ASP.Net核心应用(IIS或自通过红隼主机),方法Program.Main(),Startup.ConfigureServices()以及Startup.Configure()宿主进程启动过程中只执行一次。
很明显,Program.Main()当您使用 Kestrel Web 服务器启动 exe 文件时会执行。然而,在 IIS 中托管时是否实际调用它可能并不明显。原来如此。当 ASP.Net Core Application 与 IIS 集成时,它通常由 dotnet.exe runner 执行(也可以配置启动应用程序 .exe 文件)。您可以在添加应用程序期间创建的 web.config 中检查它:
<configuration>
<system.webServer>
<!-- ... -->
<aspNetCore processPath="dotnet" arguments=".\TestMvcApplication.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
所以它与您使用 command 运行应用程序时基本相同dotnet.exe TestMvcApplication.dll。Program.Main()在这种情况下执行,Startup方法如下。
没有Main()基本上构建Web主机的方法,ASP.Net Core应用程序就无法运行。
当您触发后续查询时,它们由相同的托管应用程序处理(我在这里指的是相同的 Windows 进程)。并且 ASP.Net Core 所需的所有配置(如路由、中间件、服务等)都已在此过程中完成。这就是 ASP.Net Core 能够处理请求的原因。
我希望这是您问题的答案。以下是一些有用的链接,可能会有所帮助:
使用 IIS 在 Windows 上托管 ASP.NET Core
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |