Bar*_*ast 2 msmq message-queue transactionscope
我已经减少了一个问题,我需要以下示例代码:
var inQueue = ".\private$\testqueue";
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue(inQueue, QueueAccessMode.Send))
{
for (var i = 0; i < 100000; ++i)
{
var msg = new Message(i);
q.Send(msg, MessageQueueTransactionType.Automatic);
}
}
ts.Complete();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它使用TransactionScope模式将100,000个整数写入(事务性,本地)队列.我的理解是这种类型的操作不会升级为DTC交易.
但是,如果我在运行时打开组件服务,我可以在本地DTC>事务列表中看到该事务.这意味着交易已经升级,对吧?
为什么会这样?我在另一个程序中因性能不佳而被提示,并且看起来使用DTC进行这样一个简单的事务可能是一个因素.无论如何,我只想了解原因.
任何帮助,将不胜感激.
来自http://geekswithblogs.net/dotnetrodent/archive/2008/04/16/121279.aspx
如果您只需要执行与消息队列相关的事务性工作,而不需要在事务上下文中的任何其他资源(如数据库),请不要使用TransactionScope,而是使用MessageQueueTransaction类.使用此类来控制仅与消息队列相关的事务与使用由DTC控制的完整分布式事务相比,性能损失较小.
| 归档时间: |
|
| 查看次数: |
1713 次 |
| 最近记录: |