状態サーバーログイベント ID 1072 またはイベント ID 1076


現象


ASP.NETでセッション状態の状態サーバーモードを使用している場合、状態サーバーを実行しているWebサーバーまたはコンピューターの負荷が高いときに、状態サーバーのアプリケーションイベントログに次のいずれかのイベントが記録されることがあります。

イベントの種類: エラー
イベント ソース : ASP.NET 1.0.3306.0
分類: なし
イベント ID: 1072
日付: 2001/09/12
時刻: 16:00:25
ユーザー: N/A
コンピュータ : ComputerName
説明:
状態サーバーで要求を処理中にエラーが発生しました。 主要なcallstack: EndOfRequest。 エラー コード: 0x80072746
前のイベントメッセージで説明されているMicrosoft.NET Frameworkのバージョンは、プレリリース版の.NET Framework 1.0です。
イベントの種類: エラー
ソース : ASP.NET 1.0.3306.0
分類: なし
イベント ID: 1076
日付: 2001/09/12
時刻: 16:02:05
ユーザー: N/A
コンピュータ : ComputerName
説明:
状態サーバーは、有効期限が切れたTCP/IP接続を閉じました。 クライアントのIPアドレスは127.0.0.1です。 有効期限は2001年9月12日午後16:02:00です。
前のイベントメッセージで説明されている.NET Frameworkのバージョンは、プレリリース版の.NET Framework 1.0です。
種類: エラー
イベント ソース: ASP.NET 1.1.4322.0
イベント カテゴリ: None
イベント ID: 1078
日付: 10/6/2005
時刻: 11:03:47
ユーザー: なし
コンピューター: ComputerName
状態サーバーは、有効期限が切れたTCP/IP接続を閉じました。 クライアントのIPアドレスは127.0.0.1です。 期限切れの読み取り操作は、2005年10月6日11時03分25秒に始まりました。

原因


ASP.NETのセッション状態の状態サーバーモードを使用する場合、WebサーバーのASP.NET Webサーバープロセスは、伝送制御プロトコル/インターネットプロトコル(TCP / IP)経由でWinSocketを使用して、状態サーバーと通信します。 デフォルトでは、WebサーバープロセスはすべてのTCP/IP送受信操作のタイムアウト値を10秒に設定します。 同様に、ステートサーバーも10秒後にすべての送受信TCP/IP操作をタイムアウトします。

ただし、Webサーバーまたは状態サーバーのCPU使用率が非常に高い(100%近く)場合は、TCP / IP操作に10秒以上かかることがあるため、終了する前にキャンセルされます。 その結果、上記のいずれかのイベントがログに記録され、発信元のクライアント要求は失敗します。 状態サーバーは、ASP.NET WebサーバープロセスがTCP/IP操作をタイムアウトすると、イベントID 1072をログします。 状態サーバーがTCP/IP操作をタイムアウトすると、状態サーバーはイベントID 1076をログします。

解決方法


ASP.NET WebサーバープロセスのTCP/IPの操作タイムアウト値を変更するには、Machine.configファイルで次の属性を変更します(WebアプリケーションのWeb.configファイルでは、以下の属性を指定します)。

        <sessionState 
stateNetworkTimeout="10"
/>
状態サーバーのTCP/IP操作タイムアウト値を変更するには、次の手順を実行します。

  1. ASP.NETの状態サーバーサービスを停止します。
  2. [スタート] ボタンをクリックし、[実行] をクリックします。次に、[Regedt32.exe] と入力し、[OK] をクリックして、レジストリ エディタを起動します。
  3. 次のレジストリ キーを見つけます。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
  4. SocketTimeoutという名前のDWORD値を追加します。 新しいTCP/IPタイムアウトを表す正の整数を秒単位で設定します。
  5. レジストリ エディタを終了します。
  6. ASP.NET状態サーバーサービスを再起動する
「現象」セクションで説明されている問題を経験するユーザーは、これらのメソッドを使用して、状態サーバーおよびすべてのWebサーバーのタイムアウト値を20秒に増やす必要があります。

Webサーバーのタイムアウト値を大きくしてもステートサーバーが実行されていない場合、 n 秒後にクライアント要求がタイムアウトします。 n は、デフォルトの10秒ではなく、新しいタイムアウト値に等しくなります。