Транзакционный или нетранзакционный MSMQ - PullRequest
4 голосов
/ 22 октября 2009

Я продолжаю видеть документацию о том, что невозможно отправить в удаленную транзакционную очередь msmq, выходящую за рамки транзакции. Мне трудно в это поверить, потому что я думаю Я делаю именно это уже несколько недель. У меня есть небольшое приложение, которое отправляет сообщения в удаленную очередь, которая является транзакционной. Просто чтобы поэкспериментировать с производительностью, различные версии клиента либо использовали TransactionScope для переноса операции отправки, либо нет. В конечном счете, использование некоторой компенсирующей логики транзакций казалось намного умнее и быстрее, поэтому использование TransactionScope на клиенте и сервере было прекращено. Дело в том, что сообщения все еще отображаются в очереди и обрабатываются службой без проблем.

Кто-нибудь может мне объяснить, что мне здесь не хватает? Я просто толстый? Не стесняйтесь говорить об этом (это, конечно, не в первый раз).

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Транзакция, на которую вы ссылаетесь с помощью TransactionScope, реализуется dtc (координатором распределенных транзакций). msmq (как sql) имеет свой внутренний механизм транзакций. В сообщении есть свойство, которое утверждает, что это транзакционное сообщение. И вы, вероятно, установите его где-то в своем коде.

1 голос
/ 25 августа 2010

Зависит от того, какую версию MSMQ вы используете. Только MSMQ 4.0 и выше (Vista, 7, Server 2008) могут выполнять удаленное чтение транзакций. И вы правильно используете TransactionScope, так как необходимо использовать код неисправности.

...