无论您为 ASP.Net Core 应用程序选择哪种托管(IIS 或通过 Kestrel 自托管),方法Program.Main()
, Startup.ConfigureServices()
and Startup.Configure()
在托管进程启动期间仅执行一次。
很明显Program.Main()
当您使用 Kestrel Web 服务器启动 exe 文件时执行。然而,在 IIS 中托管时是否实际调用它可能并不明显。其实也是如此。当ASP.Net Core应用程序与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()
在这种情况下执行,与Startup
方法如下。
Without Main()
基本上构建Web主机的方法,ASP.Net Core应用程序无法运行。
当您触发后续查询时,它们将由相同的托管应用程序处理(我在这里指的是相同的 Windows 进程)。 ASP.Net Core 所需的所有配置(如路由、中间件、服务等)都已在此过程中连接起来。这就是 ASP.Net Core 能够处理请求的原因。
我希望这是您问题的答案。以下是一些可能有帮助的有用链接:
托管在 ASP.NET Core 中 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/hosting?tabs=aspnetcore2x
使用 IIS 在 Windows 上托管 ASP.NET Core https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?tabs=aspnetcore2x
ASP.NET Core 中的应用程序启动 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/startup