我看到了完全符合这种行为的情况,一旦第一个请求进来,所有东西都开始运行。 我有一个使用案例,我真的需要网站代码在IIS启动时立即启动。 是否可以从网站内部以编程方式执行此操作或使用配置中的某些内容,以便我不必每次重启IIS时都记得ping我的网站?谢谢。
我看到了完全符合这种行为的情况,一旦第一个请求进来,所有东西都开始运行。 我有一个使用案例,我真的需要网站代码在IIS启动时立即启动。 是否可以从网站内部以编程方式执行此操作或使用配置中的某些内容,以便我不必每次重启IIS时都记得ping我的网站?谢谢。
我尝试了所有自动启动选项,最终找到了一个组合,解决了我的问题。在应用程序池中设置“启动模式”为“AlwaysRunning”,在网站本身上设置“启用预加载”为“true”。有了这两个设置,应用程序立即启动。现在,我发现了一些意外的事情。当网站处于停止状态时,我的应用程序仍然在运行。我发现,如果我想停止我的应用程序,我必须停止应用程序池,而不是网站。
如果这不起作用,请确保已安装IIS的应用程序初始化功能,因为它是可选的。
Core 3.1 更新: 我已确认此解决方案适用于 Core 3.1。如果发现无法正常工作,请再次检查是否已安装 IIS 的应用初始化功能。该解决方案的缺点是,立即停止应用程序池会立即停止我的应用程序,没有优雅地结束方式。如果未安装应用程序初始化功能,则我的应用程序将在停止应用程序池时正常停止,但是应用程序不会自动启动。
%windir%\system32\inetsrvappcmd.exe set apppool "<APP POOL NAME>" /startMode:AlwaysRunning
%windir%\system32\inetsrvappcmd.exe set app "Default Web Site/<APPLICATION NAME>" /preloadEnabled:true
我尝试了@eric上面的解决方案,但它本身并没有起作用。将这个添加到我的.CSPROJ文件中(除了他的建议之外)最终解决了问题:
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
如果你正在使用IIS,那么有一个复选框可以立即启动网站,你可以在IIS设置中尝试一下。
更新:请查看下面文章的第6点:
https://learn.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x