当WCF客户端为同一契约指定多个终结点时会发生什么?

6
它会从它们全部消耗吗? 它会抛出异常吗?
1个回答

11

你可以为同一个契约拥有多个端点,并在客户端配置中使用不同的地址,没有问题。

它们需要在<endpoint>标记上通过唯一的name=属性进行区分。

<client>
  <endpoint name="tcpEndpoint"
            address="net.tcp://server:8888/SomeService"
            binding="netTcpBinding"
            contract="IYourService" />
  <endpoint name="httpEndpoint"
            address="http://server:8777/SomeService"
            binding="basicHttpBinding"
            contract="IYourService" />
</client>

当您创建客户端代理时,需要提供您想要使用的终结点的名称:

YourClient client = new YourClient("netTcpEndpoint");

由于存在多个终端点,因此您不能仅仅实例化您的客户端并期望它找到“主要”的终端点来使用,不幸的是没有办法定义一个作为“默认”的终端点,如果没有指定,则会使用该终端点。

除此之外,我想不应该出现问题。


呀,同时连接basicHttpBinding + wsHttpBinding + netTcpBinding是没有意义的。 - vidalsasoon
@vidal:实际上并不是,没有 :-) 但是如果你需要的话,你可能会有一个客户端通过netTcp连接,另一个客户端实例通过http连接 - 不确定为什么需要这样做 - 但是你可能会需要 ;-) - marc_s
1
如果你需要一个现实生活中的例子,那么可以考虑一个Java Web客户端和一个.Net厚客户端。Java客户端使用HTTP协议,而.Net客户端则使用Net.TCP协议。 - softveda
1
@Patrik:是的,当然,在那种情况下,这完全有意义。我只是想知道是否有时候有一个.NET客户端同时使用两个不同的终结点会有意义... - marc_s
例如,一个使用Silverlight客户端(轮询双工)和一个使用WPF客户端(任何其他绑定类型),因为轮询双工是专门为Silverlight设计的。 - Eduardo Brites

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接