1

为什么此控制台程序(WCF 主机)在 Windows XP 计算机上与远程队列 (MSMQ) 一起正常工作,但在 Windows 7 上却不工作?(.net Framework 4.5(4.0相同情况))

Windows Server 2003 R2 上的 MSMQ 远程专用队列(带有消息)。一个测试客户端 - Windows XP Prof. 第二个测试客户端 Windows 7 Prof. 两台机器上的相同配置文件。

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 主机)在运行 OS Windows XP 的计算机上连接并很好地与远程队列(接收消息)一起工作,但在运行 Windows 7 的计算机上却不能工作?

在 Windows 7 计算机上,我有下一个异常(host.Open();):

System.InvalidOperationException HResult=-2146233079 Message= 绑定验证失败,因为端点侦听 URI 不代表 MSMQ 直接格式名称。服务主机打不开。确保对端点的侦听 URI 使用直接格式名称。源=System.ServiceModel

4

1 回答 1

0

一点谷歌搜索揭示了这一点:

http://rabblerule.blogspot.co.uk/2010/08/more.html

这似乎是说,如果托管端点的服务器运行的 MSMQ 版本低于您的客户端,您将收到此错误。

在您的情况下,服务器是 win2003 服务器,它将运行 MSMQ 3.0,客户端是 win7,它将运行 MSMQ 5.0(请参阅此处的版本表)。

因此,您只需要为服务和客户端使用相同或更多“相似”版本的 MSMQ。

于 2013-09-05T20:12:12.157 回答