0

冗長環境 (メインおよびバックアップ) で動作する winform アプリケーションを設計しています。

どちらのアプリケーションも 7/7 24/24 で実行する必要があり、バックエンドで ODATA サービスに接続してオブジェクトのリストを取得します。

私が達成したいのは、処理するオブジェクトエントリをロックしてから、1つのアプリケーション(最初のコマンドを送信する順序を取得)だけがそれを処理し、プロセスを続行することです。

ここで私が推測していること。

処理するオブジェクトに次のいずれかの値を与える設計メソッド AcquireLock : AcquireLock_Attempt = AcquireLock メソッドのコードの最初の行で設定します。AcquireLock_ACK = オブジェクトが並行アプリケーションによってロックされていない場合。AcquireLock_NAK = オブジェクトが既にロックされているか、エラーが発生しました。

すでに同様のシナリオに直面している場合は、遠慮なく経験を共有してください。

NB : 1 - 私のサービスは呼び出しごとに構成されています。2- ロックの取得と新しい状態の設定 (Cmd_Send_OK、Failed_Transaction など) の間の処理は、ミリ秒から秒の範囲にすることができます)。

4

2 に答える 2

0

あなたのWCFサービスはで飾ることができます

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
于 2013-10-03T10:45:39.087 に答える
0

あなたの質問は私にはあまり明確ではありませんが、リストから個々のオブジェクトをロックするには、クリティカルセクショントランザクション内/クリティカルセクショントランザクション中(読み取りでも)にSQLサーバーオブジェクトテーブル行ロックを使用することをお勧めします:そのプロセス間で、オブジェクトの大きなリストを処理できます。こちらのディスカッションをご覧ください

于 2013-10-03T10:43:56.347 に答える