文書番号: 316148 - 最終更新日: 2007年4月23日 - リビジョン: 4.2

[PRB] ASP.NET アプリケーションで断続的にセッション変数が失われる

この記事は、以前は次の ID で公開されていました: JP316148

目次

すべて展開する | すべて折りたたむ

現象

Microsoft ASP.NET アプリケーションで断続的にセッション変数が失われることがあります。

この問題が Microsoft Application Center 2000 クラスタで発生すると、ウイルス対策ソフトウェアによって Web.config ファイルまたは Global.asax ファイルがスキャンされたときにコントローラでセッションが切断されます。スキャンによってレプリケーションが起動され、ファイルが置き換えられるにつれて各メンバ サーバーのセッションが失われます。

原因

この問題には多くの原因が考えられます。この資料では、原因の 1 つとして、ウイルス対策ソフトウェアの動作によってセッション データが失われる場合について説明します。

この問題は、ウイルス対策ソフトウェアが Web アプリケーションのファイルをスキャンする場合に発生する可能性があります。スキャン処理中、ウイルス対策ソフトウェアが Global.asax、Web.config、または Machine.config を変更されたファイルとしてマークする場合があります。この変更により、Microsoft .NET Framework は Web アプリケーションを再起動します。セッション データがインプロセスに格納されている場合、Web アプリケーションが再起動されるたびにすべてのセッション データが失われます。

解決方法

この問題を解決するには、次のいずれかの方法を使用します。
  • .asax ファイルおよび .config ファイルをスキャンしないようにウイルス対策ソフトウェアを構成します。
  • ウイルス対策ソフトウェアの製造元に問い合わせます。
  • セッション データをアウトプロセスに格納するように Web アプリケーションを構成します。 関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    307598? (http://support.microsoft.com/kb/307598/ ) [INFO] ASP.NET の状態管理について

状況

この動作は仕様です。

詳細

現象の再現手順

: このサンプルでは、Web アプリケーションがセッション データをインプロセスに格納する (デフォルトの動作) ことを想定しています。
  1. 以下の手順を実行して、Microsoft Visual Basic .NET で、Web アプリケーションを作成します。
    1. Microsoft Visual Studio .NET を起動します。
    2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
    3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ボックスの一覧の [Visual Basic プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [ASP.NET Web アプリケーション] をクリックします。
    4. [場所] ボックスに、http://localhost/TestWeb1 と入力します。
    5. [OK] をクリックして、プロジェクトを作成します。デフォルトで WebForm1.aspx がプロジェクトに追加されます。
  2. ソリューション エクスプローラで [WebForm1.aspx] を右クリックし、[コードの表示] をクリックします。
  3. 次のコードを Page_Load イベント プロシージャに追加します。
    Response.Write("<b>Session Variable Test</b><br>&#xa0;<br>")
    If IsNothing(Session("TestVal")) Then
        Response.Write("TestVal old value: <b>nothing</b>")
        Session("TestVal") = 0
    Else
        Response.Write("TestVal old value: " & Session("TestVal"))
    End If
    Session("TestVal") += 1
    Response.Write("<br>TestVal new value: " & Session("TestVal"))
    					
  4. [ビルド] メニューの [ソリューションのビルド] をクリックします。
  5. ソリューション エクスプローラで [WebForm1.aspx] を右クリックし、[ブラウザで表示] をクリックします。
  6. ブラウザで [更新] をクリックします。セッション変数の初期値が nothing として表示されます。
  7. 再び [更新] を何回かクリックします。ページを更新するたびにセッション変数の初期値が大きくなります。
  8. このページをブラウザで開いたままにしておきます。
  9. メモ帳で、プロジェクトのフォルダから Global.asax を開きます。この TestWeb1 プロジェクトの Global.asax ファイルは、通常、C:\Inetpub\wwwroot\TestWeb1\Global.asax フォルダにあります。
  10. Global.asax ファイルの空白行にカーソルを移動し、Enter キーを押してもう 1 行空白行を追加します。ファイルを変更済みとしてマークするために、この手順を実行する必要があります。
  11. 変更を Global.asax ファイルに保存します。
  12. ブラウザで再び [更新] をクリックします。TestVal セッション変数に nothing の初期値が表示されます。インプロセスのセッション変数が失われています。

関連情報

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
303881? (http://support.microsoft.com/kb/303881/ ) [PRB] ASP Web アプリケーションでセッション変数が失われる
317604? (http://support.microsoft.com/kb/317604/ ) [HOWTO] SQL Server で ASP.NET セッション状態管理を構成する方法
871042? (http://support.microsoft.com/kb/871042/ ) ASP.NET アプリケーションが再起動される理由

この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
キーワード:?
kbcaching kbconfig kbprb kbstate kbsysadmin KB316148
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳