我们公司有两个不同的网络,17和18
在17网络上运行的WCF服务可以被发现。 这由以下代码配置:
host.AddDefaultEndpoints();
host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
EndpointDiscoveryBehavior behavior = new EndpointDiscoveryBehavior();
behavior.Scopes.Add(scope);
foreach(ServiceEndpoint endpoint in host.Description.Endpoints)
{
if(endpoint.IsSystemEndpoint || endpoint is DiscoveryEndpoint ||
endpoint is AnnouncementEndpoint || endpoint is ServiceMetadataEndpoint)
continue;
endpoint.Behaviors.Add(behavior);
}
带有作用域的行为被添加到所有非系统端点,并且可以通过网络发送udp数据包来发现它,这是UdpDiscoveryEndpoint的默认实例。
客户端通过使用默认的UdpDiscoveryEndpoint构建DiscoveryClient来发现服务。
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
FindCriteria criteria = new FindCriteria(typeof(T));
criteria.Scopes.Add(scope);
FindResponse discovered = discoveryClient.Find(criteria);
discoveryClient.Close();
当客户端和服务在同一网络上运行时,此方法可以正常工作。 但我希望在18网络上运行一个能够在17网络上找到服务的客户端。
那么可以使用DiscoveryClient和UdpDiscoveryEndpoint在其他网络上发现服务吗?
修改
或者这可能是防火墙问题吗?
答案 0 :(得分:1)
这不是防火墙问题,而是WS-Discovery的正常行为。 WS-Discovery使用SOAP-over-UDP发送到多播IP组(239.255.255.250)。并且多播数据包通常不被路由并且保持在本地网络的限制内。因此,如果没有外部帮助,DiscoveryClient无法在其他网络上发现服务。
您有两种选择: