Azure中的IIS应用程序初始化在升级部署后定期显示500

时间:2013-05-17 07:50:45

标签: iis azure iis-8

最近,我在一个Azure项目中实现了应用程序初始化,以最大限度地缩短每个站点预热所需的时间。

我基本上实现了几乎 This blog post中列出的步骤。

在全新部署中,它适用于IIS中的所有10个站点。问题是,当我尝试升级该部署时,前25个请求会出现500个错误,或者每个站点

现在,这并不理想,因为在部署之后,我现在必须加载每个站点大约25次才能超过每个站点进行一次预热。他们并没有止步于此,他们似乎偶尔会发生。

如果我在部署后重新映像计算机,则可以解决问题。但是以停机为代价,这不是一种选择。

有什么想法吗?

我有以下内容:

ServiceDefinition.csdef中的启动任务以打开应用程序初始化模块:

<Task commandLine="enableApplicationInitializationIIS.cmd" executionContext="elevated"></Task>

然后在我的任务中:

PKGMGR.EXE /iu:IIS-ApplicationInit

在ServiceConfiguration.csfg中,我设置了最新的osFamily

<ServiceConfiguration serviceName="Foo" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">

然后在Web角色中,我有以下内容打开所有应用程序初始化所需的设置:

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        using (var serverManager = new ServerManager())
        {
            foreach (var site in serverManager.Sites)
            {
                foreach (var application in site.Applications)
                {
                    application["preloadEnabled"] = true;
                }

                site.ServerAutoStart = true;
            }

            serverManager.ApplicationPoolDefaults.ProcessModel.IdleTimeout = new TimeSpan(00, 00, 00);
            serverManager.ApplicationPoolDefaults.Recycling.PeriodicRestart.Time = new TimeSpan(00, 00, 00);
            serverManager.ApplicationPoolDefaults["startMode"] = "AlwaysRunning";

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

            serverManager.CommitChanges();
        }

        return true;
    }
}

最后,我的每个网站都有以下内容:

<system.webServer>
    <applicationInitialization skipManagedModules="true">
        <add initializationPage="/" />
    </applicationInitialization>
</system.webServer>

不确定skipManagedModules是什么?

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题并找到了您的帖子。在我的情况下,这个问题已经存在初始部署以及升级部署。

在我的错误日志中,我发现“值不能为空”异常。似乎ServerManager无法初始化 - 未执行using语句中的代码。事实证明,我试图将程序集Microsoft.Web.Administration(从Windows 7)部署到Windows Server 2012计算机。

应用正确版本后,500错误消失。

System.TypeInitializationException: The type initializer for 'Microsoft.Web.Administration.ConfigurationManager' threw an exception. 
System.ArgumentNullException: Value cannot be null.
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.Web.Administration.ConfigurationManager..cctor()
--- End of inner exception stack trace ---
at Microsoft.Web.Administration.ConfigurationManager..ctor(ServerManager owner, String applicationHostConfigurationPath)
at Microsoft.Web.Administration.ServerManager..ctor(String applicationHostConfigurationPath)

修改

我在初始化时继续遇到500个错误,似乎这些因为2个标签而发生:

<applicationInitialization remapManagedRequestsTo="app_starting.htm" skipManagedModules="true" >
    <add initializationPage="/" />
</applicationInitialization>

删除remapManagedRequestsTo和skipManagedModules属性似乎删除了500个错误,请参阅IIS 7.5 Application Initialization for ASP.NET web service (warmup) without remapping requests