次の方法で共有


インターネット インフォメーション サービスの System.Web.HttpException

この記事は、アプリケーションが統合パイプライン モードで実行されるときに発生する 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++ モジュールを開発するを参照してください。