2017-01-23 10 views
-2

アクションを実行するために、さまざまなユーザーからの多くのajax要求を起動するWebアプリケーションでは、これらの要求の1つは、一部のデータベース更新を起動します。これが現在進行中の場合は、このアクションの他のセッション要求が無視されていることを確認します。既にロックされている静的な変数を実装するのは安全ですか?つまり、既に進行中の場合や他のリクエストによってアクションが無視される場合があります。掘りの後mvcで静的ロック変数を安全に使用する

更新

は、より多くの私は楽観的同時実行に出くわしました。私はEF6を使用していますので、これを避けるためには、Concurrency Modeを修正する必要があります。

+0

「安全」ではないのはなぜですか? – Amy

+0

あなたがここで求めているのは本当に曖昧です。他のリクエストに「無視」したいこの「アクション」は何ですか?その "行動"を "無視"しないと、現在何が起こっていますか? [ask]をお読みください。 – CodeCaster

+0

私はそうは思わなかった。ちょうど常に、Webアプリケーションの静的な回避を試みるために読むようです。だから問題はないだろう? – Tsukasa

答えて

2

実装が容易であるため、静的変数に基づくソリューションは魅力的に見える場合があります。ただし、特にWebアプリケーション環境では、メンテナンス責任を負うことになります。

IISなどのWeb環境での静的変数の問題は、アプリケーション全体でグローバルに共有されないということです。アプリプールに複数のワーカープロセスを設定すると、各プロセスはすべての静的変数。さらに、負荷分散のためにインフラストラクチャを構成する場合、各サーバー上の各プロセスは独自のコピーを持ち、アプリケーションの部分は制御しません。あなたの状況では、これは複数の更新が同時に起こる可能性を意味します。

これは、特定の時点で最大で1つの要求が進行中であることが絶対的に重要な状況で静的変数を使用することを避ける理由です。

状況によっては、同時にいくつの更新プログラムが起動されても、データを破壊しないようにする必要があります。永続層は、どのリクエストを実行するか、どのリクエストを捨てるかを決定する必要があります。この問題を解決する1つのアプローチは、楽観的なロックです。実装方法に関する一般的な情報は、this Q&Aを参照してください。

+0

それは私が思ったものです。もっと掘り下げた後、私はオプティミスティック並行性を横切ってカムをします私はEF6を使用していますので、これを避けるためには、 'Concurrency Mode'を修正するだけです。 – Tsukasa

+0

@ Tsukasaはい、EF6の楽観的同時実行はこの問題に対処するための良いツールです。 – dasblinkenlight

+0

ありがとうございます。 – Tsukasa