4

これが私の現在の質問です:

以下の回答によると、私の問題(以下で説明)はASP.NETワーカープロセスのリサイクルが原因であると推測しています。制限のため、InProcセッションストレージを使用していますが、移動する可能性はほとんどありません。すべてのセッションオブジェクトがシリアル化可能な他のタイプのストレージの場合。ただし、ワーカープロセスが頻繁にリサイクルされる理由はわかりません。私が知る限り、アプリディレクトリ内のファイルは変更されておらず、IISのオプションはこれは、プロセスが1,740分ごとにのみリサイクルされることを意味します。これは、実際のセッション損失よりもはるかに少ない頻度です。だから、私の質問は、ASP.NETワーカープロセスがリサイクルされる原因となる可能性のあるさまざまなケースは何ですか?

これが私の最初の質問です:

ASP.NETWebアプリケーションで発生する再現が難しい問題があります。アプリケーションには、ロードされ、いくつかのセッション変数を初期化する1つのメイン.aspxページがあります。このページは、ASP.NET AjaxSys.Net.WebRequestクラスを使用して、別の.aspxページに繰り返しアクセスします。このページは、セッション変数を使用してデータベースクエリを実行し、メインページを更新します(メインページが再要求されることはありません)。

場合によっては、ページを一定期間使用した後、メインページで作成されたセッションがサブページに適切に引き継がれるHTTP要求が成功すると、要求の1つが新しいASP.NETセッション(すべてのセッション)を作成するように見えます。変数が失われ(コードで例外がスローされるため)、動的に要求されたページで新しいセッションIDが報告されます。つまり、突然、メインページがサーバーから切断されます。サーバーに関する限り、ユーザーはログインしなくなります。

セッションのタイムアウトではないことはほぼ間違いありません。タイムアウト時間はばかげたものに設定されています。これが発生するまでにかかる時間は変動しますが、セッションがタイムアウトするほど長くなることはありません。定数は次のようになります。セッションタイマーを更新します。Sys.Net.WebRequests

では、HTTP要求がASP.NETセッションとの接続を失う原因となる他に何が起こっている可能性がありますか?残念ながら、これが発生したときにネットワークトラフィックをスニッフィングしていないか、ASP.NETセッションCookieがスタックしていないかどうかを確認していました。

4

5 に答える 5

3

AnkerEx アプリケーションを新しいサーバーに移行したときに、セッションの問題が発生しました。新しいサーバーには、オペレーティング システムとして Microsoft Windows Server 2008 と Microsoft Internet Information Services 7 がありました。サーバーには、バージョン 1.0.3705、1.1.4322、2.0.50727、3.0、および 3.5 の .NET Framework もインストールされていました。この問題を解決するために、ASP.NET 2.0 でアプリケーションのライフタイム関連イベントのヘルス監視を有効にしました。私はweb.configに追加しました:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

AppDomain のリサイクルを確認するのに役立ちます。イベント ビューアで確認できます。詳細へのリンクはhttp://blogs.msdn.com/rahulso/archive/2006/04/13/575715.aspxです。

web.config への追加が完了した後、アプリケーション内のほぼすべてのリンクをクリックするたびに、アプリケーションが再起動していることを Event Viewer が示しました。http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspxの記事から、ASP.NET に新しい動作があることがわかりました。アプリケーションのルート ディレクトリのディレクトリに移動すると、ASP.NET 2.0 が AppDomain の再起動を行います。

問題は、web.configに次の指示があったことです。

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

つまり、ASP.NET はアプリケーション ルートのフォルダーにある aspx ページをコンパイルしました。彼はフォルダーを作成したと思いますが、それらのいくつかも削除している可能性があります。tempDirectory 命令を削除すると、アプリケーションは安定して動作するようになりました。

于 2008-09-21T21:53:51.153 に答える
3

1 つの解決策は、InProc セッション管理ではなく、StateServer を使用することです。

多くのことが原因でセッション状態が失われる可能性があります。

  1. Web.Config の編集
  2. IIS のリセット

アプリにとってセッション状態が重要な場合は、SQL 状態管理または ASP に同梱されている State Server を使用します。ネット。

乾杯、

RB。

于 2008-09-18T16:15:41.033 に答える
1

これは、バックグラウンドスレッドで処理されていない例外が原因である可能性があります。ASP.NETワーカープロセスが終了する可能性があります。新しいプロセスは非常に迅速に開始されるため、実際には気づきませんが、すべてのセッションが失われます。

これは私ができるよりもはるかによく説明している記事です:ASP.NET2.0未処理の例外の問題

引用:

実行中のASP.NET2.0アプリケーションで未処理の例外が発生すると、通常、W3WP.exeプロセスが終了し、次のような非常に不可解なEventLogエントリが残ります。

"EventType clr20r3、P1 w3wp.exe、P2 6.0.3790.1830、P3 42435be1、P4 app_web_ncsnb2-n、P5 0.0.0.0、P6 440a4082、P7 5、P8 1、P9 system.nullreferenceexception、P10NIL。"

これは、同じ問題を説明するMicrosoft KBの記事です。KB911816未処理の例外により、ASP.NETベースのアプリケーションが.NETFramework2.0で予期せず終了します。

于 2008-09-18T16:21:38.100 に答える
1

私の推測ではメモリ消費量ですが、リサイクルをログに記録するように IIS をセットアップすると、確実にわかります。

于 2008-09-19T15:29:01.190 に答える
1

ワーカー プロセスが循環している可能性があります。 http://www.lattimore.id.au/2006/06/03/iis-dropping-sessions/

于 2008-09-18T16:15:25.790 に答える