очереди запросов с сервисом WCF - PullRequest
2 голосов
/ 05 ноября 2011

У меня есть WCF service, который может принимать несколько запросов в минуту (или секунд), которые должны записывать информацию в базу данных. Вместо того, чтобы писать это синхронно, я хотел бы поместить эти запросы в какую-то очередь на сервере, чтобы другой процесс мог прийти и обработать их. Клиенту просто нужно подтверждение, что запрос получен. Я много читал о MSMQ и WCF и т. Д., Но кажется, что с MSMQ вы пишете в очередь от клиента, а не в веб-службу, а это не то, что я хочу.

Есть ли способ сделать следующее внутри метода WCF, который не включает базу данных. Возможно, я не понял концепцию MSMQ права.

 public bool ProcessMessage(string message)
    {
      if(IsValid(message))
       return AddToQueue(message);

      return false;
    }

РЕДАКТИРОВАТЬ: Мне нужно проверить сообщение перед записью в очередь.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2011

Я делаю это в настоящее время в приложении, которое я создал. Служба WCF размещается как служба HTTP в IIS. Он принимает вызовы и пакеты данных, я беру эти данные, проверяю их (сообщаю вызывающему абоненту, что это неправильно или нет), затем отправляю данные другому сервису WCF, использующему привязку netMSMQ, который затем выполняет окончательную запись в базу данных. Хорошая вещь об этом состоит в том, что он будет стоять в очереди на одном MSMQ, и Служба WCF, которая связана с этим MSMQ, выдает по одному сообщению за раз и обрабатывает его. Служба HTTP WCF может затем обрабатывать столько запросов, сколько ей нужно, и ей не нужно беспокоиться о объединенных сообщениях, так как это работа службы, связанной с WCF / MSMQ. Общее название для этого шаблона - структура моста.

ETA: вторая служба (связанная с MSMQ служба WCF) всегда работает как служба Windows. Это также обрабатывает разделение проблем. Служба HTTP проверяет и не заботится о базе данных, другая служба выполняет запись в базу данных.

0 голосов
/ 05 ноября 2011

Смысл использования MSMQ должен заключаться в том, чтобы избавить ваш сервис от беспокойства о том, что что-то стоит в очереди. MSMQ гарантирует, что ваши сообщения будут доставлены в правильном порядке и что ваш сервис обрабатывает их в правильном порядке.

Ваша служба вообще не должна поддерживать очередь, если вы правильно ее настроили.

...