有没有办法迭代潜在的WCF服务器端点?

时间:2014-02-14 18:30:31

标签: c# .net wcf

在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配置进行管理?

2 个答案:

答案 0 :(得分:0)

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

答案:

  

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

答案包含一篇指向本文的链接,该链接非常有用,可能会解决您的需求:http://msdn.microsoft.com/en-us/magazine/ee335779.aspx

来自文章:

  

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

答案 1 :(得分:0)

在我看来,这更像是一种最佳实践。如果您没有关于要连接的服务器的先验知识,最好的办法是防止最坏的情况发生。

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

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