【问题标题】:Is there a way to iterate over potential WCF server endpoints?有没有办法迭代潜在的 WCF 服务器端点?
【发布时间】:2014-03-14 06:12:27
【问题描述】:

在 WCF 服务器/客户端情况下,服务器和客户端上的 WCF 配置必须同步。例如。在我的客户端具有以下配置的情况下,服务器必须具有相同的绑定名称、合同和配置,否则将无法正确连接。

<bindings>
   <basicHttpBinding>
       <binding name="ServerContract" />
   </basicHttpBinding>
</bindings>
<client>
   <endpoint address="http://localhost/.../ServerContractImpl.svc/Mtom"
            binding="basicHttpBinding" bindingConfiguration="ServerContract"
            contract="ServerReference.ServerContract" name="ServerContract" />
</client>

我正在为我无法控制其配置的服务器编写 WCF 客户端代码,这个要求让我非常紧张。我已经使用 VS2010 的服务参考生成了我的初始客户端配置,但是如果服务器管理员在任何时候更改了它们的绑定名称,我的 WCF 客户端将如何响应呢?

所以我的问题:

  • 假设 WCF 客户端具有服务器的 .svc 端点地址的 URL,它如何找出服务器上哪些端点和绑定处于活动状态并连接到它选择的任何一个?
  • WCF 服务器和客户端由不同的人控制,通常根据 WCF 配置进行管理的情况如何?

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    几周前我问了一个有点相关的问题:WCF endpoint discovery from a client; Is it possible?

    来自答案:

    以下 MSDN 文章应该解决您的问题,因为它明确指出客户端在发现之前必须事先了解服务地址。

    答案包括指向这篇文章的链接,该链接非常有用,可能会解决您正在寻找的内容:http://msdn.microsoft.com/en-us/magazine/ee335779.aspx

    来自文章:

    如果该服务可以使用任何可用地址,那就太好了。反过来,客户端需要在运行时发现该地址。事实上,有一个基于行业标准的解决方案规定了如何进行发现。该解决方案,简称为发现(及其支持机制),是本专栏的主题。

    【讨论】:

      【解决方案2】:

      在我看来,这更像是一个最佳实践。如果您对要连接的服务器一无所知,最好的办法是防止最坏的情况发生。

      您可以开发一种异常机制来将一个端点故障转移到另一个端点。您希望捕获的异常包括 CommunicationException 和 FaultException,它们都在 Service.ServiceModel 命名空间下。

      其次,正如其他用户所说,更好地了解 WCF 服务器端,看看他们是否启用了 WCF 发现。 WCF 发现允许您将 WCF 客户端与其连接的地址分离。在服务失败/迁移的情况下,您的客户端(您自己)可以自动连接到正确的地址而不会失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 2011-05-28
        • 2022-01-25
        • 2019-10-14
        • 1970-01-01
        • 2015-10-17
        • 2017-12-01
        相关资源
        最近更新 更多