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 位置设置这些设置。

  1. 机器applicationHost.config (c:\windows\system32\inetsrv\Config)
  2. 网站 web.config(默认网站为 c:\inetpub\wwwroot)
  3. 申请web.config

我尝试了所有但只成功配置了 3,应用程序 web.config。 我的具体用例是在 WCF 服务上调用 GET 方法。

其他答案中也有应用程序初始化的步骤。这是最有帮助的。 IIS 8.0 Application Initialization

  1. 安装 Windows 功能应用程序初始化 (Web-AppInit)
  2. 设置 IIS 应用程序池Start mode = AlwaysRunning
  3. 设置IIS应用程序Preload Enabled = true
  4. 加入申请web.config

    <system.webServer>     
        <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true">
            <add initializationPage="/Service.svc/Method/Parameter" />
        </applicationInitialization>
    </system.webServer> 
    
  5. 回收应用程序池

  6. 检查应用是否已初始化。

我想指出的是,初始化页面是相对于应用程序的,而不是 website/domain 的根目录,所以如果我的绝对路径是

domain.com/path1/path2/Service.svc

我不会在 initializationPage 参数中包含 /path1/path2