1

サーバーで時々奇妙な問題が発生ます。これは通常、1 つまたは複数の Web アプリケーションがアップグレードされたときに発生します。問題をデバッグすると、ここまで来ました...

リクエストの処理中:

  • ASP.NET アプリケーションでは、オブジェクトをセッションに配置します
  • 後で実行するコード (同じリクエスト) では、同じセッション値を検索します。空っぽです!

セッション サービスが機能していないようですね。このコードは 1 日に何百回も実行され、Web サーバー上の Web アプリケーションのアップグレードに関連するだけで、開発環境または運用状況で失敗することはありません。

そして奇妙なことに、私たちは状況を修正する適切な方法もあまり好きではありません. IIS のリセット、ASP.NET 状態のサーバーの停止/開始、web.config の編集、さらにはサーバーの再起動でさえ、すべてのビンが使用されます。通常、それを修正するには組み合わせが必要です。ほとんどの場合、すぐには修正されませんが、IIS の 3 回目のリセットなどの2 ~ 3 分後に修正されることがあります。(したがって、結局それを修正したものではない可能性があります。)

私はここで夢中になります。何が問題なのですか?マイクロソフトのバグですか?

いくつかの詳細情報:

  • .NET 2.0 で実行しています
  • ASP.NET 状態サービスを使用しています
  • セッション変数にアクセスして null を返すコードは、ASP.NET アプリによって参照されるアセンブリ内にあります。HttpContect.Current を使用してセッションを取得します
4

2 に答える 2

2

HttpContext.Items は、セッション全体ではなく、リクエストの存続期間中にのみ使用できるため、考慮する必要があります。

元の質問に答えるには、

  1. 項目をセッションに追加すると、次の行で正常に取得できますか?

  2. サーバー固有ですか?つまり、一方のサーバーはセッションの値を確認できますが、もう一方のサーバーは確認できませんか?

  3. 変数にアクセスしようとしている dll には、.net 1.1 と .net 2.0 のプラットフォーム ターゲットの違いはありますか?

于 2008-10-01T11:29:52.353 に答える
0

セッション変数を使用しないことを検討できますか?

同じセッションでデータが必要な場合は、セッション変数を使用するよりもはるかに軽量な HttpContext.Items を使用できます。

あなたの質問への回答: 初めてアクセスしたとき、セッションがまだ作成されていない可能性があります。存在しない場合は例外をスローします。

チェック

If Not IsNothing(Context.Session) Then
    'do something
end if
于 2008-10-01T11:09:11.780 に答える