![](/img/trans.png)
[英]Distributed transaction with MSMQ and SQL Server but sometimes getting dirty reads
[英]MSMQ Distributed Transaction (DTC) cannot import transaction
我需要在一次交易中接收,處理和發送消息。 由於MSMQ不支持事務性遠程接收,因此我使用DTC。 現在,我什至沒有收到消息。 這是我用於此的代碼:
string queueName = "trxwrite";
string serverName = "mqtest";
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
MessageQueue mq = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queueName));
mq.Formatter = new XmlMessageFormatter(new[] {typeof (string)});
Message message = mq.Receive(MessageQueueTransactionType.Automatic);
ts.Complete();
}
mqtest
上啟用了DTC,並將其配置為允許入站和出站。 我收到以下錯誤消息: 無法導入事務 。 有人可以幫忙嗎? 另外,我的客戶端計算機如何知道它應該使用服務器上的DTC進行交易? 從到目前為止我發現的樣本中看不出來...
顯然,必須安裝DTC並將其配置為允許客戶端和服務器上的網絡訪問。 這樣,此代碼片段就可以正常工作:
string queueName = "trxwrite";
string queue2Name = "trxread";
string serverName = "mqtest";
Parallel.For(0, 300, (int i) =>
{
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
MessageQueue mq = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queueName));
mq.Formatter = new XmlMessageFormatter(new[] { typeof(DateTime) });
Message message = mq.Receive(MessageQueueTransactionType.Automatic);
DateTime createDt = (DateTime)message.Body;
MessageQueue mq2 = new MessageQueue(string.Format(@"FormatName:DIRECT=OS:{0}\{1}", serverName, queue2Name));
mq2.Formatter = new XmlMessageFormatter(new[] { typeof(DateTime) });
Message messageToSend = new Message(createDt);
mq2.Send(messageToSend, MessageQueueTransactionType.Automatic);
ts.Complete();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.