ASP.NET 4でWebアプリケーションを自動起動する
一部のWebアプリケーションでは、大量のデータをダウンロードするか、要求を処理する前に処理するために時間のかかる初期化プロセスが必要です。 現在ASP.NETを使用している開発者は、Global.asaxファイルで「Application_Start」イベントを使用することがよくあります。これは、クエリを初めて実行するときです。 彼らは独自のスクリプトを発明して、アプリケーションに偽のリクエストを送信し、ユーザーの前に定期的にこのコードを「起動」して実行します。
ASP.NET 4は、このシナリオをより適切に実装する「自動起動」と呼ばれる新しい機能を提供し、IIS 7.5(Windows 7およびWindows Server 2008 R2にインストール)で使用できます。 自動起動を使用すると、アプリケーションワーカープロセスの起動に制御的に参加し、ASP.NETアプリケーションを初期化して、HTTP要求を受け入れることができます。
ASP.NET 4自動起動アプリケーションの構成
自動実行を使用するには、IISの「アプリケーションプール」ワーカープロセスを設定する必要があります。これは、Webサーバーが最初にロードされたときにアプリケーションによって自動的に起動されます。 IIS 7.5でapplicationHost.configを開き(C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config)、ノードにstartMode =” AlwaysRunning”属性を追加する必要があります。
< applicationPools >
< add name ="MyAppWorkerProcess" managedRuntimeVersion ="v4.0" startMode ="AlwaysRunning" />
</ applicationPools >
Windowsタスクマネージャーを起動して[すべてのユーザーのプロセスを表示]を選択し、編集したapplicationHost.configファイルを保存すると、ファイルを保存した直後に開始される新しいプロセス "w3wp.exe"が表示されます。
単一のIISアプリケーションワーカープロセスプールは、複数のASP.NETアプリケーションをホストできます。 構成にserviceAutoStartEnabled =“ true”属性を追加することにより、プロセスのロード時に自動的に起動するアプリケーションを選択できます。
< sites >
< site name ="MySite" id ="1" >
< application path ="/" serviceAutoStartEnabled ="true" serviceAutoStartProvider ="PreWarmMyCache" />
</ site >
</ sites >
< serviceAutoStartProviders >
< add name ="PreWarmMyCache" type ="PreWarmCache, MyAssembly" />
</ serviceAutoStartProviders >
serviceAutoProvider =“ PreWarmMyCache”属性を使用すると、アプリケーションの「ウォームアップ」ロジックを使用する独自のクラスを構成できます。 このクラスは、ワーカープロセスとアプリケーションがプリロードされるとすぐに(外部Web要求を受信する前に)自動的に呼び出され、初期化またはキャッシュロジックを開始するために使用できます。
public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {
public void Preload( string [] parameters) {
// Perform initialization and cache loading logic here...
}
}
IISは、「ウォームアップ」ロジックが失敗するまでリクエストが受け入れられない状態でアプリケーションを起動します。 初期化コードが開始され、Preloadメソッドで実行されると、ASP.NETアプリケーションは要求を処理する準備ができたとマークされます。
新しい自動起動機能とIIS7の負荷分散拡張機能-Application Request Routing(ARR)を組み合わせて、アプリケーションが初期化されHTTPトラフィックを受信する準備ができたらすぐにバランサーに信号を送ることができるため、サーバーをWebファームに配置して要求を処理できます。