Application Initialization 機能有効化時に HTTP Module 内でサーバー変数を取得すると発生する問題について

こんにちは。 日本マイクロソフト、CSS デベロッパー ツールズ AppPlat の神田一行です。 今回は IIS に古くから存在する ISAPI モジュールと IIS 8.0 で標準搭載された Application Initializationを組み合わせて利用した際に発生する可能性があるトラブルについて、お伝えさせていただきます。 Application Initialization について IIS は、既定でサービス開始直後にワーカープロセスを起動しません。ユーザーからのリクエストを受けてからワーカープロセスを起動し、その中で ASP.NET の初期処理などを行っています。結果、最初にリクエストを行うユーザーは、通常時と比べて応答に時間がかかる (初期化が完了するまで待たされる) こととなります。 この初回リクエストにかかるコストを軽減するための機能として Application Initialization が提供されており、自動的にワーカープロセスを起動させる機能と、仮想的な要求を内部的に発行し、該当の初期化処理を事前に終わらせる機能、の組み合わせで実現されています。 症状 IIS 上にホストしたページにアクセスした際、ブラウザーからの応答が無くなる、もしくは、503 Service Unavailable エラーが表示されます。 また、IIS サーバー上のイベントログに以下の様なログが繰り返し記録されます。 条件 本事象は、次の条件を全て満たすことで発生します。 Windows Server 2012 から標準機能として搭載された Application Initialization を役割サービスから有効にする Web サイトやアプリケーションの詳細設定において、”有効化されたプリロード” が True となっている 処理の過程で “UNENCODED_URL” サーバー変数を参照する ISAPI…