Windows Xp和Windows 7中的MSMQ,WCF和远程队列

时间:2013-09-05 16:33:40

标签: .net wcf msmq

为什么此控制台程序(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

1 个答案:

答案 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版本。