如何让托管在IIS中的.Net Core网站立即启动?

50few1ms  于 2023-06-30  发布在  .NET
关注(0)|答案(4)|浏览(142)

这篇博客文章解释了当.Net Core网站托管在IIS中时,网站代码实际上并没有运行,直到第一个请求进入IIS:
https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS
这正是我所看到的行为,一旦第一个请求进来,一切就开始运行。我有一个用例,我真的需要网站代码启动,只要IIS启动。有没有一种方法可以通过编程从网站内部完成此操作,或者在配置中使用一些东西,这样我就不必记得每次IIS重新启动时都要ping我的网站?谢谢你。

k5ifujac

k5ifujac1#

我尝试了我读到的每一个自动启动选项,最后想出了解决我问题的一个组合。在应用程序池中,将“启动模式”设置为“AlwaysRunning”,并在网站上将“预加载启用”设置为“true”。使用这两个设置,应用程序将立即启动。现在,我发现了一些意想不到的事情。当网站处于停止状态时,我的应用程序继续运行。我发现,如果我想停止我的应用程序,我必须停止应用程序池,而不是网站。
如果这不起作用,请确保为IIS安装了应用程序初始化功能,因为它是可选的。
https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-application-initialization
核心3.1更新:我已经确认此解决方案确实适用于Core 3.1。如果您发现它不起作用,请仔细检查是否为IIS安装了应用程序初始化功能。这种解决方案的缺点是,停止应用程序池会立即停止我的应用程序,而没有办法优雅地结束。如果未安装应用程序初始化功能,我的应用程序将在应用程序池停止时正常停止,但应用程序不会自动启动。

alen0pnh

alen0pnh2#

我尝试了@eric上面的解决方案,它本身不起作用。把这个添加到我的.CSPROJ文件中(除了他的建议之外)终于成功了:

<PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
    <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
68bkxrlz

68bkxrlz3#

如果您希望将应用配置为在服务器重新启动时立即启动,则可以使用这些命令设置AppPool和应用程序设置。这在您无法将桌面远程连接到服务器时很有用。以下假设应用程序在默认网站下。您需要将<APP POOL NAME><APPLICATION NAME>替换为您的场景的值。

%windir%\system32\inetsrvappcmd.exe set apppool "<APP POOL NAME>" /startMode:AlwaysRunning
%windir%\system32\inetsrvappcmd.exe set app "Default Web Site/<APPLICATION NAME>" /preloadEnabled:true

注意:这是针对.NET 6 Web应用程序的,并且假设您已经安装了IIS模块Application Initialization。如果您没有安装IIS模块,请在运行命令之前先安装IIS模块。

pod7payv

pod7payv4#

如果您使用的是IIS,有一个复选框可以立即启动网站,您可以在IIS设置中尝试。
更新:参见下面文章的第6点:
https://learn.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x

相关问题