Взаимное исключение веб-службы C # - PullRequest
0 голосов
/ 26 августа 2011

elI имеет два типа узлов.Один является координатором, а другой - рабочим узлом.

Они взаимодействуют через SOAP.

Все рабочие узлы отправляют координатору запросы на взаимоисключающую запись базы данных.

IЯ хочу, чтобы координатор возвращал идентификатор безопасной записи каждому работнику, чтобы ни у одного работника не было такой же записи для обработки.

Я знаю, как сделать что-то подобное с потоками в C #, используя mutex, но я хотел знать,рекомендации по синхронным вызовам веб-служб.

РЕДАКТИРОВАТЬ: вот проблема у меня

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;
    }
}

1 Ответ

0 голосов
/ 26 августа 2011

У меня была похожая проблема, которую я решил на уровне базы данных:

  1. присваивает каждому работнику уникальный идентификатор
  2. при запросе записи у координатора рабочие передают свой идентификатор
  3. Подпрограмма БД была хранимой процедурой, которая началась с получения блокировки приложения (SQL Server)
  4. Я бы тогда искал «свободную» запись, затем «проштамповал» ее идентификатором работника, чтобы мы знали, что она заблокирована и кем
  5. вернуть запись работнику
...