我在服务器 THOR 上有一个事务性 MSMQ 队列设置。我可以使用以下代码从工作站向该队列发布消息:
var queue = new MessageQueue("FormatName:Direct=OS:thor\\private\\myqueue");
using (var tx = new MessageQueueTransaction())
{
tx.Begin();
queue.Send("test", tx);
tx.Commit();
}
但是,当我尝试使用 WCF 连接时,我的消息永远不会出现在队列中。这是我正在使用的配置:
<system.serviceModel>
<bindings>
<netMsmqBinding>
<binding name="ClientNewsFeedServiceBinding" durable="true" exactlyOnce="true">
<security mode="None" />
</binding>
</netMsmqBinding>
</bindings>
<client>
<!-- NewsFeed Service -->
<endpoint name="INewsFeedService"
address="net.msmq://thor/private/myqueue"
binding="netMsmqBinding"
bindingConfiguration="ClientNewsFeedServiceBinding"
contract="Service.Contract.INewsFeedService" />
</client>
</system.serviceModel>
和代码:
using (var tx = new TransactionScope())
{
var cf = new ChannelFactory<INewsFeedService>("INewsFeedService");
var service = cf.CreateChannel();
service.TestMessage("test");
((IChannel)service).Close();
tx.Complete();
}
我没有任何例外,但在 THOR 的队列上没有发布任何消息。有任何想法吗?我什至不知道如何调试它,因为它只是默默地失败。
更新
如果我将我的 MSMQ URI 更改为“net.msmq://localhost/private/myqueue”,那么它将发布到我设置的本地事务队列。队列本身的设置是相同的(例如,我执行了相同的步骤来创建 localhost 和 THOR 队列)。