Windows Azure是否支持Application Warm-Up模块或类似的东西?

时间:2010-03-19 17:18:25

标签: asp.net iis azure

我们在Windows Azure中托管的Web角色使用旧的基于ASMX的Web Reference来联系外部系统。 Web Reference代理代码足够大,第一次实例化它会产生很大的成本。

我们希望能够在Web角色启动而不是第一次请求时运行。

我知道IIS 7.5有一个Application Warm-Up模块可以让我们实现这个目标,但是我无法弄清楚在Windows Azure上是否存在类似的东西。

谢谢, 科里

4 个答案:

答案 0 :(得分:5)

我喜欢Steve Marx的解决方案。

将此行添加到 ServiceDefinition.csdef:

<Startup>
  <Task commandLine="startup\disableTimeout.cmd" executionContext="elevated" />
</Startup>

在名为 startup 的文件夹中添加 disableTimeout.cmd ,并使用以下代码行:< / p>

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

此处的原始解决方案:http://blog.smarx.com/posts/controlling-application-pool-idle-timeouts-in-windows-azure

在模拟器中运行时请阅读:http://blog.smarx.com/posts/skipping-windows-azure-startup-tasks-when-running-in-the-emulator

答案 1 :(得分:1)

看起来Global.asax中的Application_Start处理程序在部署Web角色时(对于ASP.NET)而不是第一个请求时执行,因此这对我们有效。

答案 2 :(得分:0)

有关此内容的更新,下面的文章介绍了如何配置Windows Azure WebRole

http://fabriccontroller.net/blog/posts/iis-8-0-application-initialization-module-in-a-windows-azure-web-role/

您可以使用以下命令在启动批处理脚本中安装模块:

PKGMGR.EXE /iu:IIS-ApplicationInit

然后在WebRole中(我已将其改编为与托管多个网站的WebRole一起使用):

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
        using (var serverManager = new ServerManager())
        {
            // The foreach ensures we enable initialization for all websites hosted on this WebRole.
            foreach (var application in serverManager.Sites.SelectMany(x => x.Applications))
            {
                application["preloadEnabled"] = true;
            }

            foreach (var applicationPool in serverManager.ApplicationPools)
            {
                applicationPool["startMode"] = "AlwaysRunning";
            }

            serverManager.CommitChanges();
        }

        base.Run();
    }

    public override bool OnStart()
    {
        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

        return base.OnStart();
    }
}

答案 3 :(得分:-1)

由于在Windows Azure上托管Web角色的VM的唯一目的是回答Web请求,我认为这种调整是云操作系统的责任,而不是云应用程序。话虽这么说,检查Azure云操作系统是否确实可以在默认情况下进行此类调整可能会很有趣。