このオンラインについてはいくつかの投稿がありますが、どれも確定的な回答はありません。私の質問はこれです。私は静的プロパティを持っている場合は、セッションの値を取得/設定するだけでスレッドセーフであると宣言されているか、または潜在的に問題を引き起こしますか?私はどのようにASP.NETでセッションを持つ静的プロパティ
public static string CurrentClient {
get {
return HttpContext.Current.Session[Constants.SESSION_CURRENT_CLIENT] as string;
}
set {
HttpContext.Current.Session[Constants.SESSION_CURRENT_CLIENT] = value;
}
}
注:私のアプリでは、私は例えば、私は、このような現在のクライアントを保存し、一定の値にアクセスするための中央のエントリポイントの一種として機能するために私のGlobal.asaxに静的プロパティを追加しました私のget/setに静的変数を設定しないで、私は単に現在のセッションを参照しています。
アプリケーションは、IISで単一のWebアプリケーションとしてインストールされるように設定されていますが、複数の異なる「インスタンス」にサービスを提供します。基本的には、あなたが入ってくるサブドメインに応じて、必要に応じてこれらのセッション変数をすべて設定します。だから、例えば:
client1.mydomain.comが設定されます:
はGlobal.CurrentClient = "client1";
client2.mydomain.comが設定されます:
Global.CurrentClient = "client2";
これは、それが正常に動作して、スレッドセーフであるとすべきであるように思えます2つのサブドメインはそれぞれ固有のセッションを持つ必要があるため、相互にトリップすることはありませんが、まさにこれが起こっているようです。私は何らかの理由でCurrentClient = "client2"を使ってclient1.mydomain.comにリクエストを受け取ります。
ここでは何が起こっていますか?
これはまさに私の考えであったが、次に自分自身を推測し始めた。だから、おそらく起こっているのは、セッションがサブドメイン間で混乱しているということです。我々は、2つの異なるサブドメインに同時にログインすると、それが壊れているように見える – snappymcsnap