最近,我在一个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
是什么?
答案 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。