使用 net.msmq 时如何添加 WCF 服务引用

How to add WCF Service Reference when using net.msmq

使用服务时如何启动 WCF 客户端仅在 net.msmq 上可用
- 当你使用"添加服务参考"时,你会得到一个错误...

无法初始化 MetadataExchangeClient 实例,因为方案 \\'net.msmq\\' 没有可用的绑定。您可以在构造函数中提供绑定,或指定配置名称。
参数名称:方??案
如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

例如,我已经启动并运行了 MSDN 中的 BizTalk 示例 WcfNetAdapterPublishing,它包括一个控制台测试客户端,该客户端使用 ...

1
net.msmq://localhost/private/WcfNetMsmqAdapterPublishing

所以看起来是可能的,但我还是看不到开始?


您可以通过 basicHttpBinding 在单独的端点上公开相同的服务和数据合同,使用该端点(及其元数据交换)创建服务引用,然后手动调整您的 app.config 以使用 netMsmqBinding而是。

或者您可以在服务器和客户端项目之间与您的服务和数据合同共享合同程序集,并手动创建配置(真的没什么大不了的),并使用 ChannelFactory<T> 在代码中创建您的客户端代理.由于您已经在使用 netMsmqBinding,因此您肯定在电线的两端都使用了 .NET - 因此该技术应该可以正常工作。


您需要添加一个前缀为 http 的基地址(除了您拥有的 net.msmq 之外)。因此,在您给出的示例中使用 net.msmq,您将添加以下内容:

1
http://localhost/private/WcfNetMsmqAdapterPublishing ...

然后您需要为 mex 添加一个端点,如下所示:

1
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

然后启动您的服务(在 Visual Studio 之外)...然后添加对您添加的 http:// 端点的引用...

这是我的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<service name="Services.Archiver" behaviorConfiguration="FacebookArchiver">
      <endpoint address=""
                binding="netMsmqBinding"
                bindingConfiguration="msmq"
                contract="Services.IArchiver"
                behaviorConfiguration="validator" />
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
      <host>
        <baseAddresses>
         
         
        </baseAddresses>
      </host>
    </service>

在本例中,您只需将服务引用添加到 http://localhost/private/Archiver...就完成了。