Я изучаю использование MSMQ для нового проекта моей команды, но мне нужно знать, могу ли я отправлять сообщения MSMQ и выполнять команды SQL в System.Transactions.TransactionScope и заставить их выполнять фиксацию или откат вместе. Я не могу найти в Интернете надежный источник, который бы сказал «да» с примерами кода.
Мне нужно отправить несколько сообщений в единую очередь и вставить несколько записей в единую базу данных, но мне нужно добиться успеха или неудачи вместе.
Обновлено: я не смог проверить, работает ли это или нет в моем тестировании (я быстро снял эту задачу), но во всей документации указано, что TransactionScope действительно захватывает сообщения MSMQ и команды SQL в одном и том же экземпляре.





По личному опыту я знаю, что TransactionScope отлично работает с SQL. Я не слишком знаком с MSMQ, но быстрый поиск Гугл показывает некоторые примеры (обычно обсуждения на форуме), где похоже, что он работает успешно. Объект System.Messaging.MessageQueue также имеет свойство .Transactional, а метод .Send () имеет параметр MessageQueueTransaction, поэтому я бы сказал, что все они должны работать вместе.
Вот пример кода с одного из форумов в поиске (не мой код):
using (TransactionScope scope = new TransactionScope())
{
using (MessageQueue myQueue = new MessageQueue(QUEUE_NAME))
{
if (myQueue.Transactional)
{
myQueue.Send(TicketTextBox.Text, "Message", MessageQueueTransactionType.Automatic);
}
}
scope.Complete();
}
Просто вставьте свой SQL-код в блок using () для TransactionScope (перед .Complete ()), и все будет в порядке?
Я не знаю ответа, но, конечно же, было бы несложно собрать вместе несколько модульных тестов, чтобы проверить это?