Можно ли выполнять команды SQL и отправлять сообщения MSMQ в TransactionScope? - PullRequest
2 голосов
/ 30 октября 2008

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

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

РЕДАКТИРОВАТЬ: Я не смог проверить, работает ли это в моем тестировании или нет (я быстро снял эту задачу), но во всей документации указано, что TransactionScope действительно захватывает сообщения MSMQ и команды SQL в одном экземпляре.

1 Ответ

3 голосов
/ 30 октября 2008

Из личного опыта я знаю, что TransactionScope отлично работает с SQL. Я не слишком знаком с MSMQ, но быстрый поиск Google показывает некоторые примеры (обычно обсуждения на форуме), где похоже, что он работает успешно. Объект 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 ()), и вы должны быть в порядке?

...