0

elI には 2 種類のノードがあります。1 つはコーディネーターで、もう 1 つはワーカー ノードです。

それらは SOAP を介して通信します。

すべてのワーカー ノードは、相互に排他的なデータベース レコードの要求をコーディネーターに送信します。

コーディネーターに安全なレコードの ID を各ワーカーに返してもらいたいので、ワーカーが同じレコードを処理することはありません。

ミューテックスを使用して C# のスレッドで同様のことを行う方法は知っていますが、同期 Web サービス呼び出しのベスト プラクティスを知りたいと思っていました。

編集:私が抱えている問題はここにあります

public class Coordinator: System.Web.Services.WebService
{
    [WebMethod]
    //Returns a mutually record to worker nodes
    public int RequestRecordID()
    {
        //i want to lock here
        int id = repository.getFirst(el => el.locked==false);
        repository.getByID(id).locked = true;
        repository.save();
        //unlock here
        return id;
    }
}
4

1 に答える 1

0

データベースレベルで解決した同様のタイプの問題がありました。

  1. 各ワーカーに一意の識別子を割り当てます
  2. コーディネーターからの記録を要求するとき、労働者は自分の識別子を送信します
  3. DB ルーチンは、アプリケーション ロックを取得することによって開始されるストアド プロシージャでした (SQL Server)
  4. 次に、「無料」のレコードを探し、ワーカー識別子を「スタンプ」して、ロックされていることと、誰によってロックされているかを確認します。
  5. レコードをワーカーに返す
于 2011-08-26T19:28:15.257 に答える