IIS 8.5 - 应用程序初始化不工作
IIS 8.5 - Application initialization not working
我已经安装了Application Initialization,将网站的应用程序池Start Mode设置为"Always Running",并在网站的高级设置中设置Preload Enabled = "True"
但是,如果我手动回收应用程序池并等待 10 秒,当我重新加载网站时,我仍然需要再等待 10 秒让网站预热。这表示网站没有启动。
查看任务管理器,我可以看到应用程序池一直 运行 - 即使在回收之后也是如此。但是,在我向网站发出自己的请求之前,内存使用率非常低。
我注意到的一件事是,我的网站高级设置中没有 link 设置:
https://blogs.msdn.microsoft.com/vijaysk/2012/10/11/iis-8-whats-new-website-settings/
如何让我的应用程序自动启动?
尝试应用程序初始化设置:
我遇到了类似的问题,并且非常努力地尝试使用 IIS 8.5 Windows Server 2012 R2。 IIS 中的所有内容在参考了这么多站点之后都已正确设置,但是错过了应用程序初始化设置。请参阅下面的 link,设置部分。
https://www.iis.net/configreference/system.webserver/applicationinitialization
结果是一大堆设置都必须正确。您完成所有步骤以安装相关组件并根据此 link 进行各种配置更改:http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
我缺少的关键部分是 Web.config 中的说明,如下所示。我只是将它转到“/Login”,这是一条有效的路线,但是一旦我将其切换到“/[Controller]/[Action]”,它就起作用了。
这条路线的优点是您可以创建一个自定义操作,该操作也会访问数据库(初始化 Entity Framework),并执行您希望的任何其他慢速初始化。对我来说,我只是从数据库 table 中读取一条记录,所以我 ASP.NET 自动启动,并且还节省了预热 EF 所需的几秒钟:)
<system.webServer>
<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
<add initializationPage="/Login/WarmUp" />
</applicationInitialization>
</system.webServer>
这些文章很不错:
Use IIS Application Initialization for keeping ASP.NET Apps alive
IIS 8.0 Application Initialization
但是在我的案例中,安装 应用程序初始化角色 时出现问题。
检查您的 IIS 应用程序的 模块 列表。确保存在 ApplicationInitializationModule。
我需要 uninstall/re-install 这个模块。
我不知道发生了什么,因为这起初似乎有效,但几周后在开发过程中停止了。没有多少 tinkering/rework 修复它,我开始怀疑我从来没有真正看到这个工作。
问题已解决 uninstall/re-install 应用程序初始化模块角色。
如果有人想知道当您有多个区域要初始化时在 MVC 中要做什么,您需要将区域放在开头,全部在根 web.config 文件中。我被困了一段时间试图把它放在该地区的 web.config。而且它与混合应用程序完美兼容。
<add initializationPage="/NotMVC.aspx" />
<add initializationPage="/Area1/Controller/Action" />
<add initializationPage="/Area2/Controller/Action" />
可以在多个 .config 位置设置这些设置。
- 机器applicationHost.config (c:\windows\system32\inetsrv\Config)
- 网站 web.config(默认网站为 c:\inetpub\wwwroot)
- 申请web.config
我尝试了所有但只成功配置了 3,应用程序 web.config。
我的具体用例是在 WCF 服务上调用 GET 方法。
其他答案中也有应用程序初始化的步骤。这是最有帮助的。 IIS 8.0 Application Initialization
- 安装 Windows 功能应用程序初始化 (
Web-AppInit
)
- 设置 IIS 应用程序池
Start mode = AlwaysRunning
- 设置IIS应用程序
Preload Enabled = true
加入申请web.config
<system.webServer>
<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true">
<add initializationPage="/Service.svc/Method/Parameter" />
</applicationInitialization>
</system.webServer>
回收应用程序池
- 检查应用是否已初始化。
我想指出的是,初始化页面是相对于应用程序的,而不是 website/domain 的根目录,所以如果我的绝对路径是
domain.com/path1/path2/Service.svc
我不会在 initializationPage
参数中包含 /path1/path2
。
我已经安装了Application Initialization,将网站的应用程序池Start Mode设置为"Always Running",并在网站的高级设置中设置Preload Enabled = "True"
但是,如果我手动回收应用程序池并等待 10 秒,当我重新加载网站时,我仍然需要再等待 10 秒让网站预热。这表示网站没有启动。
查看任务管理器,我可以看到应用程序池一直 运行 - 即使在回收之后也是如此。但是,在我向网站发出自己的请求之前,内存使用率非常低。
我注意到的一件事是,我的网站高级设置中没有 link 设置: https://blogs.msdn.microsoft.com/vijaysk/2012/10/11/iis-8-whats-new-website-settings/
如何让我的应用程序自动启动?
尝试应用程序初始化设置:
我遇到了类似的问题,并且非常努力地尝试使用 IIS 8.5 Windows Server 2012 R2。 IIS 中的所有内容在参考了这么多站点之后都已正确设置,但是错过了应用程序初始化设置。请参阅下面的 link,设置部分。
https://www.iis.net/configreference/system.webserver/applicationinitialization
结果是一大堆设置都必须正确。您完成所有步骤以安装相关组件并根据此 link 进行各种配置更改:http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
我缺少的关键部分是 Web.config 中的说明,如下所示。我只是将它转到“/Login”,这是一条有效的路线,但是一旦我将其切换到“/[Controller]/[Action]”,它就起作用了。
这条路线的优点是您可以创建一个自定义操作,该操作也会访问数据库(初始化 Entity Framework),并执行您希望的任何其他慢速初始化。对我来说,我只是从数据库 table 中读取一条记录,所以我 ASP.NET 自动启动,并且还节省了预热 EF 所需的几秒钟:)
<system.webServer>
<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
<add initializationPage="/Login/WarmUp" />
</applicationInitialization>
</system.webServer>
这些文章很不错:
Use IIS Application Initialization for keeping ASP.NET Apps alive
IIS 8.0 Application Initialization
但是在我的案例中,安装 应用程序初始化角色 时出现问题。
检查您的 IIS 应用程序的 模块 列表。确保存在 ApplicationInitializationModule。
我需要 uninstall/re-install 这个模块。
我不知道发生了什么,因为这起初似乎有效,但几周后在开发过程中停止了。没有多少 tinkering/rework 修复它,我开始怀疑我从来没有真正看到这个工作。
问题已解决 uninstall/re-install 应用程序初始化模块角色。
如果有人想知道当您有多个区域要初始化时在 MVC 中要做什么,您需要将区域放在开头,全部在根 web.config 文件中。我被困了一段时间试图把它放在该地区的 web.config。而且它与混合应用程序完美兼容。
<add initializationPage="/NotMVC.aspx" />
<add initializationPage="/Area1/Controller/Action" />
<add initializationPage="/Area2/Controller/Action" />
可以在多个 .config 位置设置这些设置。
- 机器applicationHost.config (c:\windows\system32\inetsrv\Config)
- 网站 web.config(默认网站为 c:\inetpub\wwwroot)
- 申请web.config
我尝试了所有但只成功配置了 3,应用程序 web.config。 我的具体用例是在 WCF 服务上调用 GET 方法。
其他答案中也有应用程序初始化的步骤。这是最有帮助的。 IIS 8.0 Application Initialization
- 安装 Windows 功能应用程序初始化 (
Web-AppInit
) - 设置 IIS 应用程序池
Start mode = AlwaysRunning
- 设置IIS应用程序
Preload Enabled = true
加入申请web.config
<system.webServer> <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true"> <add initializationPage="/Service.svc/Method/Parameter" /> </applicationInitialization> </system.webServer>
回收应用程序池
- 检查应用是否已初始化。
我想指出的是,初始化页面是相对于应用程序的,而不是 website/domain 的根目录,所以如果我的绝对路径是
domain.com/path1/path2/Service.svc
我不会在 initializationPage
参数中包含 /path1/path2
。