質問: global.asaxの`void Application_Start(object sender, EventArgs e)`に処理を書いておくと、アプリケーション起動時というか、そのサイトに初めてアクセスがあったタイミングで処理が走ってくれると思います。 が、そうではなく、IISの起動やサイトの起動、アプリケーションプールの起動をトリガに処理を行わせるような仕組みはあるのか?という質問です。 何か手段がありましたらご教示願います。 --- Windows Server 2008R2 IIS 7.5
回答: アプリケーションプールとサービスを常時起動に設定したうえで、`IProcessHostPreloadClient`を実装してアプリケーションに登録すると起動時にメソッドが呼び出されるようになります。 まず適当なアセンブリで`System.Web.Hosting.IProcessHostPreloadClient`を実装します。 ``` using System; using System.Web.Hosting; public class ProcessHostPreloadClient : IProcessHostPreloadClient { public void Preload(string] parameters) { // ここに処理を記述する } } ``` それから、アプリケーションプールの`startMode`を`OnDemand`から`AlwaysRunning`に変更します。 ![画像の説明をここに入力 使用する`IProcessHostPreloadClient`は`Machine.config`の`system.applicationHost/serviceAutoStartProviders`に登録する必要があります。 !画像の説明をここに入力 プロバイダーとサイトを関連付けるには、アプリケーションの構成を設定する必要があります。`system.applicationHost/sites/site/application`の`serviceAutoStartEnabled`を`True`にしたうえで、`serviceAutoStartProvider`に先ほど登録した`name`を指定します。 !画像の説明をここに入力 ※上の画面を出すにはサイトとアプリケーションで「...」ボタンを押してコレクションエディターを開く必要があります。 ここまで設定すると、IIS起動時に`Preload`が呼び出されるようになります。