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

时间:2016-02-18 11:49:24

标签: asp.net-mvc iis iis-8.5

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

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

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

我注意到的一件事是,根据此链接,我的网站高级设置中没有“自动启动”设置: https://blogs.msdn.microsoft.com/vijaysk/2012/10/11/iis-8-whats-new-website-settings/

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

5 个答案:

答案 0 :(得分:17)

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

我缺少的关键部分是Web.config中的指令,如下所示。我让它只是“/ Login”,这是一个有效的路线,但只要我将其切换到“/ [Controller] / [Action]”就行了。

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

<system.webServer>
  <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
      <add initializationPage="/Login/WarmUp" />
    </applicationInitialization>
</system.webServer>

答案 1 :(得分:5)

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

我遇到过类似的问题,并且非常努力地使用IIS 8.5 Windows Server 2012 R2。在引用了许多站点之后,IIS中的所有内容都已正确设置,但却错过了应用程序初始化设置。请参阅以下链接,“设置”部分。

enter image description here

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

答案 2 :(得分:3)

这些文章非常好:

Use IIS Application Initialization for keeping ASP.NET Apps alive

IIS 8.0 Application Initialization

但是在我的情况下,安装应用程序初始化角色时出现问题。

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

enter image description here

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

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

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

答案 3 :(得分:2)

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


????(??#?-QEQEQEQEQEQEQEQE?kYe??Ȍ?"8?,?9A?i;??1]?????=.SE[????Sqs-?,?iY??3]]QEQEQEQEQEQEQEQE??????(??(??(??(??(??(??(??(??(??(??????(??(??(??(??

答案 4 :(得分:1)

可以在多个.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. 检查应用是否已初始化。

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

domain.com/path1/path2/Service.svc

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