代码之家  ›  专栏  ›  技术社区  ›  SteveC

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

  •  3
  • SteveC  · 技术社区  · 15 年前

    只有在net.msmq上才能使用该服务,如何启动WCF客户端?
    -当您使用“添加服务引用”时,会得到一个错误…

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

    例如,我已经启动并运行了从msdn发布的biztalk示例wcfnetadaptersepublishing,它包括一个控制台测试客户端,该客户端使用位于…

    net.msmq://localhost/private/WcfNetMsmqAdapterPublishing
    

    看来是有可能的,但我还是看不到开始?

    2 回复  |  直到 13 年前
        1
  •  2
  •   marc_s    15 年前

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

    或者,您只需在服务器和客户机项目之间共享合同程序集、服务和数据合同,然后手动创建配置(实际上不算什么),并使用 ChannelFactory<T> . 因为你已经在使用 网络绑定 你肯定在电线的两端使用了.NET,所以这项技术应该可以正常工作。

        2
  •  1
  •   SteveC    13 年前

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

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

    然后需要为添加一个端点 mex 像这样:

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

    然后启动服务(在Visual Studio外部)…然后添加对 http:// 您添加的终结点…

    以下是我的一个例子:

    <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>
              <add baseAddress="net.msmq://localhost/private/Archiver" />
              <add baseAddress="http://localhost/private/Archiver" />
            </baseAddresses>
          </host>
        </service>
    

    在这个示例中,您只需将服务引用添加到 http://localhost/private/Archiver …完成。