为什么此控制台程序(WCF主机)在Windows XP计算机上正常使用远程队列(MSMQ)但在Windows 7上无法正常工作? (.net Framework 4.5(4.0相同情况))
Windows Server 2003 R2上的MSMQ远程专用队列(带消息)。 一个测试客户端 - Windows XP教授 第二个测试客户端Windows 7教授 两台机器上的配置文件相同。
在所有机器上安装并启动MSMQ。
我有一个WCF的程序主机(控制台主机)。
var host = new System.ServiceModel.ServiceHost (typeof (TestMessageReceiver ));
host.Faulted += HostFaulted;
host.Open();
配置文件(部分):
<system.serviceModel>
< services>
< service behaviorConfiguration =" myBehavior" name="TestMSMQwin7.TestMessageReceiver" >
< endpoint address="net.msmq://zzz.zzz.zzz.com/private/rbcmessagestest"
binding="netMsmqBinding"
bindingConfiguration="ReceiverMSMQconfig"
contract="RBC.Receiver.ContractInterfaces.IMessageReceiver" />
< host>
< baseAddresses>
< add baseAddress="http://xxx.xxx.xxx.com:8089/MessageReceiver" />
</ baseAddresses>
</ host>
</ service>
</ services>
< behaviors>
<!--...-->
</ behaviors>
< bindings>
< netMsmqBinding>
< binding name =" ReceiverMSMQconfig" maxReceivedMessageSize="5242880" maxBufferPoolSize="5242880" >
< readerQuotas maxDepth =" 32" maxStringContentLength= "5242880 " maxArrayLength="16384" maxBytesPerRead =" 4096" maxNameTableCharCount= "16384 "/>
< security mode =" None" />
</ binding>
</ netMsmqBinding>
</ bindings>
</system.serviceModel>
问题:为什么此控制台程序(WCF主机)在运行Windows Windows XP的计算机上连接并与远程队列(接收消息)配合良好,但在运行Windows的计算机上不起作用7?
在Windows 7计算机上,我有下一个异常(host.Open();):
System.InvalidOperationException HResult = -2146233079 Message =绑定验证失败,因为端点侦听URI不代表MSMQ直接格式名称。无法打开服务主机。确保为端点的listen URI使用直接格式名称。源= System.ServiceModel
答案 0 :(得分:0)
一些谷歌搜索透露了这一点:
http://rabblerule.blogspot.co.uk/2010/08/more.html
如果托管端点的服务器没有运行比您的客户端更低版本的MSMQ,那么您似乎会收到此错误。
在您的情况下,服务器是win2003服务器,它将运行MSMQ 3.0,客户端是win7,它将运行MSMQ 5.0(see here for version table)。
因此,您只需要为服务和客户端使用相同或更多“类似”的MSMQ版本。