2014-02-14 145 views
0

在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客户端,假设它的URL服务器的.svc端点地址,找出哪些端点和绑定在服务器上的活动,并连接到哪个其中一个它选择?
  • 这些情况如何,WCF服务器和客户端由不同的人控制,通常由WCF配置管理?

回答

0

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

从答案:

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

答案包括一个链接到这篇文章,这是相当翔实,并且可能解决你在找什么:http://msdn.microsoft.com/en-us/magazine/ee335779.aspx

从文章:

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

0

在我看来,这更像是一个最佳实践的东西。如果您没有事先知道您要连接的服务器,最好的办法就是防止发生最坏的情况。

您可以开发一种异常机制,将一个端点故障转移到另一个端点。您期望捕获的异常包括CommunicationException和FaultException,两者均位于Service.ServiceModel名称空间下。

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

相关问题