2013-09-04 1 views
5

私はasp.net Webサイトを開発しています。コンテンツは、asp.net Webサイトの複数のセッションのユーザーに交換されています

  • 2人の異なるユーザーが異なるセッションでそのWebサイトにアクセスしている場合、1人のユーザーのコンテンツが別のユーザーにスワップされています。
  • javacsriptを使用しています。.aspxページからpagemethodsを呼び出し、コードの後ろにC#を呼び出しています。
  • この問題は、2人のユーザーが同じ機能を同時に呼び出すときに主に発生します。
  • 私は静的変数がこの問題を引き起こす可能性があると考え、静的変数を使用しないか、または静的関数を使用しないように静的関数を使用しようとしました。

この問題で私を助けてください。

+2

あなたは、コードの例を投稿してもらえますか? – Damon

+0

このサイトはロードバランサの後ろにありますか?あなたのセッションは、プロセスまたはデータベースに格納されていますか? –

+0

@Damonこれは特定のコードブロックには関係しません。この問題は、静的変数が使用されている場所で発生します。私は静的変数と静的メソッドを避けようとしましたが、静的メソッドを使用するには静的メソッドが必須です。まだサンプルコードが必要な場合は、私はそれを提供します。 – Hulk

答えて

1

私たちは同様の問題を抱えており、それがセッションIDを混乱させたロードバランサ(f5 Big-IP)であることがわかりました。ロードバランサをステートフルに変更し、現在は完全に機能しています。

5

スレッディングに関連することもあります。 Lockこれらの変数を上げてみると役立ちます。

スタティックメソッドは、メソッドがスレッドセーフであることが保証されていても、スタティックな変数状態を保証しません。あなたはその状態を管理しなければならず、asp.netは静的変数をすべてのユーザーの間で共有して扱います。関連する質問からthis answerを参照してください。

もっと読み:WindowsサービスでASPNET状態サービスのThread Synchronization

+0

静的変数/静的関数をロックするのは問題ありませんが、n個のユーザーが同じ機能にアクセスすると、このロックによってWebサイトが遅くなる可能性があります。 – Hulk

+0

コストはほとんどの場合無視できますが、戻って最適化しなければならないシナリオはほとんどありません。しかし、あなたはあなたがスレッド同期化を全く新しい世界に見て始めます。 [Semaphores](http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx)や[Mutexes](http://msdn.microsoft.com/en/)のような複雑な楽しいものがたくさんあります。 -us/library/system.threading.mutex.aspx)。 – TombMedia

+0

すべてのコメント申し訳ありませんが、[この質問](http://stackoverflow.com/questions/154551/volatile-vs-interlocked-vs-lock)は本当にあなたが読んでみたいものです、[this one](http ://stackoverflow.com/questions/4673618/how-expensive-is-the-lock-statement)スピードについてのあなたの質問に答えますが、短い答えは50nsです。 – TombMedia

1
  • ターン。ページレベルのため
  • 代わりに静的の使用セッション[ "X"]はx
  • 使用ビューステート[ "X"]は(以下の例を参照)あなたのセッション状態の設定を確認してください
1

値。 「InProc」以外のモードを使用していて、その問題がいくつか発生している可能性があります。

<sessionState mode="InProc" cookieless="false" timeout="60" /> 

プレースとしてSessionIDを使用するキーを持つキャッシングインスタンスを使用することも検討できます。 エンタープライズライブラリは、優れたキャッシュ実装を提供します。

これが役に立ちます。

1

静的変数と静的メソッドの使用を削除して、リクエストに対応します。

1

は、web.configファイルでsessionStateを追加します。

<configuration> 
    <system.web> 
    <sessionState timeout="120" mode=" [InProc|StateServer|SQLServer|Custom]" cookieless="false" /> 
    </system.web> 
</configuration> 

は、次の解決策試してみてください。

  1. スタート]> [管理ツール]> [サービス
  2. を右ASP.NET状態をクリックしてくださいサービスをクリックし、「開始」をクリックします。

変数も@TombMedia's Answerで説明したようにロックする必要があります。

このリンクはあなたを助けることがあります。Exploring Session in ASP.NET

0

これがWeb.configファイルに設定すると<%する@ outputcacheは期間=「1」varybyparam =「なし」%>これは、すべての.aspxを削除しますフォーム..

よろしく ルピー

関連する問題