IIS 8.5 - 应用程序初始化无效

Lau*_*ost 4 iis asp.net-mvc iis-8.5

我已经安装了应用程序初始化,将网站的应用程序池启动模式设置为"始终运行",并在网站的高级设置中设置Preload Enabled ="True".

但是,如果我手动回收应用程序池并等待10秒钟,那么当我重新加载网站时,我仍然需要等待10秒才能让网站热身.这表明该网站尚未启动.

查看任务管理器,我可以看到应用程序池一直在运行 - 即使在回收之后也是如此.但是,在我向网站提出自己的请求之前,内存使用率非常低.

我注意到的一件事是,根据以下链接,我的网站的高级设置中没有"自动启动"设置:https: //blogs.msdn.microsoft.com/vijaysk/2012/10/11/iis -8-什么,新网站的设置/

如何让我的应用程序自动启动?

Lau*_*ost 17

事实证明,这是一整套必须正确的设置.您将完成所有步骤以安装相关组件,并根据以下链接进行各种配置更改:http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis -80的应用程序初始化

对我来说缺少的关键部分是Web.config中的指令,如下所示.我得到它只是"/登录"这是一个有效的路线,但一旦我切换到"/ [控制器]/[行动]"它工作.

此路由的优点是您可以创建自定义操作,该操作也将访问数据库(初始化实体框架),并执行您希望的任何其他慢速初始化.对我来说,我只是从数据库表中读取一条记录,所以我自动启动了ASP.NET,并且还节省了预热EF所需的几秒钟:)

<system.webServer>
  <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
      <add initializationPage="/Login/WarmUp" />
    </applicationInitialization>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,如果站点配置为**require**SSL,则初始化将不起作用.请参阅[IIS 7.5应用程序初始化预热和HTTPS](/sf/ask/1332362111/).解决方法:不要求SSL + URL重写.请参阅[当网站需要SSL时,应用程序初始化模块失败](https://support.microsoft.com/en-ca/help/2843964/application-initialization-module-fails-when-web-site-requires-ssl); 您通常会使用服务器的规范名称替换_localhost_. (3认同)

Gur*_*_07 5

尝试应用程序初始化设置:

我有类似的问题,并尝试使用IIS 8.5 Windows Server 2012 R2.在引用了许多站点之后,IIS中的所有内容都已正确设置,但却错过了应用程序初始化设置.请参阅以下链接,"设置"部分.

在此输入图像描述

https://www.iis.net/configreference/system.webserver/applicationinitialization


jlo*_*ail 5

这些文章非常好:

使用 IIS 应用程序初始化使 ASP.NET 应用程序保持活动状态

IIS 8.0 应用程序初始化

但是,就我而言,安装Application Initialization Role时出现问题。

检查您的 IIS 应用程序的模块列表。确保存在ApplicationInitializationModule

在此处输入图片说明

我需要卸载/重新安装这个模块。

我不知道发生了什么,因为这起初似乎有效,然后几周后在开发过程中它停止了。没有多少修补/返工修复它,我开始怀疑我从未真正看到过这个工作。

卸载/重新安装应用程序初始化模块角色时解决的问题。


小智 5

如果有人想知道当您有多个区域需要初始化时在 MVC 中该怎么做,您需要将这些区域放在开头,所有这些都在根 web.config 文件中。我在试图将其放入该区域的 web.config 中时被卡住了一段时间。它还与混合应用程序完美兼容。

<add initializationPage="/NotMVC.aspx" />
<add initializationPage="/Area1/Controller/Action" />
<add initializationPage="/Area2/Controller/Action" />
Run Code Online (Sandbox Code Playgroud)


Ger*_*ton 5

有多个 .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 应用程序初始化

  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> 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 回收应用程序池

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

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

domain.com/path1/path2/Service.svc
Run Code Online (Sandbox Code Playgroud)

我不会包含/path1/path2initializationPage参数中。

  • 我遵循完全相同的步骤,由于某种原因,当我回收应用程序池或重新启动 IIS 时,此应用程序初始化模块没有命中我的控制器。不知道我错过了什么...... (3认同)