我正在使用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配置)或我的命名空间预留存在问题。
答案 0 :(得分:0)
我发现了我的麻烦。事实上,我使用了一个调用SQL Server 2005程序的事务处理服务。
为了在SQL 2005中使用事务处理绑定,可以在事务范围中执行过程。
如果抛出异常并且未捕获,则DTC用于回滚过程。我的麻烦是我的服务器上未激活DTC /远程客户端连接。
因此,您应该激活DTC /远程客户端连接,或者不使用事务范围。
如果您要使用 DTC 和远程客户端连接,必须先激活远程客户端连接,因为激活DTC和远程客户端连接会导致重新启动服务器强>