【问题标题】:Configuring WCF to use one of two endpoints将 WCF 配置为使用两个端点之一
【发布时间】:2010-01-27 17:01:07
【问题描述】:

如何将 WCF 配置为仅使用两个可用端点中的一个

我需要两个 TCP 端口(因此使用 netTcpBinding)。服务主机应首先尝试绑定到第一个端口。如果失败,并且只有在失败时,它才应该尝试绑定到第二个端口。

编辑

我知道它可以通过编程方式实现,但我打算以声明方式实现(仅使用 .config 文件)。

【问题讨论】:

    标签: .net wcf wcf-binding wcf-endpoint


    【解决方案1】:

    在您使用代理对象打开连接之前,可以在过程中的任何时候在代码中设置端点地址,包括端口号。所以你可以设置地址,然后测试连接,如果失败,尝试另一个端口。这里有一些代码希望能说明我的观点。

    Dim oProxy as New YourWCFServiceType()
    
    oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try first"))
    
    Dim FirstBindingSucceeded as Boolean
    Try
        oProxy.Open()
        FirstBindingSucceeded = True
    Catch
    End Try
    
    If FirstBindingSucceeded = False Then
        oProxy.Endpoint.Address = New System.ServiceModel.EndpointAddress(New Uri("The address and port number you want to try second"))
    End If
    
    oProxy.Open()
    

    【讨论】:

    • 我想以声明方式进行。
    • 我仍然认为我的回答解决了您的问题。 .config 文件中定义的端点只是一个默认值。如果您想在两个不同的地址/端口之间进行选择,那么只需在配置中添加一个设置并在需要时读取它。 在我看来,Shiraz Bhaiji 描述的合约类型之间切换所涉及的开销会大大降低定义两个端点的好处默认。当您需要第三个端口时会发生什么?
    【解决方案2】:

    在服务器端,公开具有两个绑定的服务没有问题。

    但在客户端,您会收到重复的合同错误(或类似的文字)

    一种方法是创建两个除了名称之外相同的接口(合同)。

    你有一个实现的副本,每个服务都继承自这个实现。

    然后,您在不同的端口上有两个服务,它们具有相同的实现/功能。

    然后,您需要在客户端上对其进行编程,使其首先尝试第一个端口,然后如果失败则尝试第二个端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多