我需要在一次交易中接收,处理和发送消息。由于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进行交易?从目前为止我找到的样本中无法说出......
答案 0 :(得分:0)
显然,必须安装和配置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();
}
});