この記事は、アプリケーションが統合パイプライン モードで実行されるときに発生する System.Web.HttpException
を解決し、解決策を提供するのに役立ちます。
元の製品バージョン: インターネット インフォメーション サービス
元の KB 番号: 2605401
現象
以下のシナリオについて考えてみます。
- Microsoft インターネット インフォメーション サービス (IIS) Web サーバーで統合パイプラインを使用するように構成された Web アプリケーションを実行します。
- アプリケーションは、
SF_NOTIFY_AUTHENTICATION
イベントに登録された ISAPI フィルターを使用します。 - アプリケーションの global.asax は、
Application_BeginRequest
イベントを実装します。
このような状況では、この例外が発生する可能性があります。
System.Web.HttpException: このサーバー変数は、要求の実行中に変更できません。
原因
この動作は仕様です。
IIS は、 SF_NOTIFY_AUTHENTICATION
イベントの ISAPI フィルターを呼び出すと、 AUTH_USER
サーバー変数を更新します。 アプリケーションは統合パイプラインを使用するように構成されているため、ASP.NET はサーバー変数の変更を検索します。
AUTH_USER
は変更が期待されない変数の 1 つであるため、ASP.NET は例外をスローします。
アプリケーション プールが統合パイプライン モードではなくクラシック モードで実行されている場合、この例外はスローされません。
解決方法
この例外を回避するには、次のいずれかの方法を使用します。
- 統合パイプライン モードではなくクラシック モードで実行するようにアプリケーション プールを構成します。
- 認証通知を処理するには、ネイティブまたはマネージド Http モジュールを使用します。
詳細
詳細については、「 IIS 用のネイティブ C\C++ モジュールを開発するを参照してください。