Msmq .NET api MessageQueue.Send не выбрасывает, где ожидается - PullRequest
2 голосов
/ 24 января 2012

Я довольно новичок в Msmq и не понимаю, как работают транзакции.

Итак, скажем, у меня есть транзакционная очередь, и я отправляю ей сообщение без указания какой-либо транзакции, которую метод не генерирует, и сообщение никуда не отправляется. В документации написано -

'Если вы используете эту перегрузку для отправки сообщения в транзакционную очередь, сообщение будет отправлено в очередь недоставленных сообщений'.

Однако я нигде не видел сообщения в системных очередях.

Этот код для справки -

  var path = @".\private$\transactionalQ";
  if (MessageQueue.Exists(path))
    MessageQueue.Delete(path);
  var q = MessageQueue.Create(path, false);

  q.Send("non transactional message");

Я вижу похожее поведение при отправке транзакционных сообщений в нетранзакционную очередь.

Я ожидал, что вызов метода сгенерирует, если я делаю что-то неожиданное. Я что-то пропустил?

1 Ответ

0 голосов
/ 18 июля 2014

Вы идете правильно, но в методе MessageQueue.Send нет никакой возможности различить переходное сообщение и непереходное сообщение. MessageQueue.Send (Object) Метод не перегружен для одного параметра, а не для объекта (я имею в виду любой специализированный тип). Таким образом, решение заключается в том, что вы должны сначала проверить сообщение в правильном формате или нет, а затем передать его в очередь. Также существует только одно исключение, связанное с методом отправки: MessageQueueException , которое генерируется из-за неверного пути, который вы указали, и из-за ошибки при доступе к API очереди сообщений. Для получения дополнительной информации вы можете перейти по этой ссылке а также статья MSDN .

...