连接到没有终结点地址的 WCF 服务

Connect to a WCF service without endpoint address

当客户端调用WCF 服务时,第一步是创建到服务的连接(使用端点地址,或使用配置文件记录服务器url)。但是如果client不知道service的地址,client应该怎么找到service呢?

正如我说过的,WCF 服务器应该向客户端公开固定端点,以便客户端可以发现它。 DiscoveryEndpoint 可以使用 Unicast/Multicast 来发布服务元数据。单播使用 DiscoveryEndpoint 配置端点,并应分配一个固定地址,而多播使用 UdpDiscoveryEndpoint,它使用 UDP 多播发布服务元数据。所以不需要给 UdpDiscoveryEndpoint 分配地址,因为它有默认的广播地址,例如 ipv4 是 soap.udp://239.255.255.250:3702.

服务应将 ServiceDiscoveryBehavior 添加到服务行为集合中。默认情况下,在服务应用 ServiceDiscovery 行为后,所有服务端点都会暴露给客户端,如果我们想隐藏一个,我们需要在特定端点上禁用 EndpointDiscoveryBehavior。

 <endpointBehaviors>
        <behavior>
          <endpointDiscovery enabled="false">
          </endpointDiscovery>
        </behavior>
      </endpointBehaviors>

在客户端。我们找到位于 System.ServiceModel.Discovery 程序集中的 DiscoveryClient class 的可用服务。搜索完成后,所有可用的端点都存储在 FindResponse 对象中。我们可以使用其 Endpoints 属性调用目标服务。