Sandrino のソリューションは機能するかもしれませんが、Web ロールを昇格されたセキュリティ モードで実行する必要がなく、Web ロールの開始時に (最初のユーザーがサイトにアクセスする前に) アプリケーションを強制的に開始するソリューションを次に示します。このソリューションは、IIS 8 の「アプリケーションの初期化」機能を必要としない古いバージョンの IIS/Windows Server でも機能します。
次のコンテンツを含む WebRole.cs を追加するだけです。
using System;
using System.Net;
using System.Net.Security;
using System.Threading;
using Microsoft.WindowsAzure.ServiceRuntime;
namespace Website
{
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
WarmUpWebsite("HttpIn");
return base.OnStart();
}
public override void Run()
{
while (true)
{
WarmUpWebsite("HttpIn");
Thread.Sleep(TimeSpan.FromMinutes(1));
}
}
public void WarmUpWebsite(string endpointName)
{
// Disable check for valid certificate. On som sites live HTTP request are redirected to HTTPS endpoint. And when running on staging SSL the certificate is invalid.
RemoteCertificateValidationCallback allowAllCertificatesCallback = (sender, certificate, chain, sslPolicyErrors) => true;
ServicePointManager.ServerCertificateValidationCallback += allowAllCertificatesCallback;
try
{
RoleInstanceEndpoint endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[endpointName];
string address = String.Format("{0}://{1}:{2}", endpoint.Protocol, endpoint.IPEndpoint.Address, endpoint.IPEndpoint.Port);
//This will cause Application_Start in global.asax to run
new WebClient().DownloadString(address);
}
catch (Exception)
{
// intentionally swallow all exceptions here.
}
ServicePointManager.ServerCertificateValidationCallback -= allowAllCertificatesCallback;
}
}
}
クレジット: http://weblogs.thinktecture.com/cweyer/2011/01/poor-mans-approach-to-application-pool-warm-up-for-iis-in-a-windows-azure-web- role.html
while(true) を Sandrino のアプローチに置き換えるか、アプリケーション プールのアイドル タイムアウトを無効にすることができます: http://blog.smarx.com/posts/controlling-application-pool-idle-timeouts-in-windows-azure