当客户端调用WCF服务时,第一步是创建与服务的连接(使用端点地址,或使用配置文件记录服务器URL)。但是,如果客户不知道服务地址,应该如何找到服务?
答案 0 :(得分:1)
我曾经说过,WCF服务器应将固定端点公开给客户端,以便客户端可以发现它。 DiscoveryEndpoint可以使用单播/多播来发布服务元数据。单播使用DiscoveryEndpoint配置端点,并应为其分配固定的地址,而组播使用UdpDiscoveryEndpoint,后者通过UDP组播发布服务元数据。因此,无需为UdpDiscoveryEndpoint分配地址,因为它具有默认的广播地址,例如ipv4为soap.udp://239.255.255.250:3702。
Service应该将ServiceDiscoveryBehavior添加到Service行为集合。默认情况下,服务应用ServiceDiscovery Behavior后,所有服务端点都向客户端公开,如果要隐藏一个,则需要在特定端点上禁用EndpointDiscoveryBehavior。
<endpointBehaviors>
<behavior>
<endpointDiscovery enabled="false">
</endpointDiscovery>
</behavior>
</endpointBehaviors>
在客户端。我们在System.ServiceModel.Discovery程序集中找到带有DiscoveryClient类的可用服务。搜索完成后,所有可用的端点都存储在FindResponse对象中。我们可以使用其Endpoints属性调用目标服务。