在工作组模式下将新消息发布到专用队列时,WCF服务从未得到通知

时间:2008-12-17 11:59:48

标签: wcf msmq

我正在使用WCF(C#)在工作组模式下的Windows Server 2003下从私有MSMQ队列发送/接收消息。

客户端WCF /服务WCF和MSMQ在同一台计算机上。

有一个客户端将消息发送到私有队列,这完全有效。有一个服务从同一个私有队列接收消息,但MSMQ似乎永远不会调用该服务。 (没有错误发生)

消息堆叠在队列中但没有拉出来。在另一台计算机(域模式而非工作组模式)上,消息被完美地发送和接收。

导致MSMQ永远不会调用我的服务的工作组模式出了什么问题?

之后,我写了一个C#测试,总是在同一台计算机上,但这次我创建了MessageQueue并以这种方式订阅了ReceiveCompleted事件:

MessageQueue MQueue = new MessageQueue(".\\private$\\nameofmyqueue");
MQueue.MessageReadPropertyFilter.SetAll();
MQueue.ReceiveCompleted += MessageEventHandler;
Message Msg = MQueue.Receive();

当现在有新消息时,我从MSMQ队列接收事件。

我认为我的服务配置(WFC配置)或我的命名空间预留存在问题。

1 个答案:

答案 0 :(得分:0)

我发现了我的麻烦。事实上,我使用了一个调用SQL Server 2005程序的事务处理服务。

为了在SQL 2005中使用事务处理绑定,可以在事务范围中执行过程。

如果抛出异常并且未捕获,则DTC用于回滚过程。我的麻烦是我的服务器上未激活DTC /远程客户端连接。

因此,您应该激活DTC /远程客户端连接,或者不使用事务范围。

如果您要使用 DTC 和远程客户端连接,必须先激活远程客户端连接,因为激活DTC和远程客户端连接会导致重新启动服务器