我正在研究在我的团队的新项目中使用 MSMQ,但我需要知道是否可以在 System.Transactions.TransactionScope 中发送 MSMQ 消息并执行 SQL 命令,并让它们一起提交或回滚。我在网上找不到带有代码示例的可靠来源。
我需要向单个队列发送一些消息,并在单个数据库中插入一些记录,但我需要同时成功或失败。
编辑:我无法在测试中实际验证这是否有效(我很快就完成了这项任务),但所有文档都表明 TransactionScope 确实在同一实例中捕获 MSMQ 消息和 SQL 命令。
最佳答案
从个人经验来看,我知道 TransactionScope 与 SQL 配合得很好。我对 MSMQ 不太熟悉,但快速 Google search显示了一些看起来运行成功的示例(通常是论坛讨论)。 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 代码放入 TransactionScope 的 using() block 中(在 .Complete() 之前),就可以开始了?
关于.net - 是否可以在 TransactionScope 中执行 SQL 命令并发送 MSMQ 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/251050/