我有一个连接到 WCF 服务并使用 WCF 4.0 发现的桌面应用程序。我使服务可发现的代码如下所示:
public static void MakeServiceHostDiscoverable(ServiceHost sh)
{
IServiceBehavior Beh = new ServiceDiscoveryBehavior();
sh.Description.Behaviors.Add(Beh);
ServiceEndpoint Endp = new UdpDiscoveryEndpoint();
sh.AddServiceEndpoint(Endp);
}
最近该应用程序被同一家公司的两个不同部门使用。每个部门都有自己的服务器,该部门的客户端只能发现该部门的服务器。现在客户可以看到公司网络内的所有服务器。
该服务是否有办法限制可以发现的 IP 地址?或者,更好的是,它可以在发现请求发生时动态批准/拒绝发现请求吗?
WS-Discovery 的初始发现方面按照广播原理工作——它不接收和回复请求。在某种程度上,元数据的目的是帮助客户区分其有资格获得哪些服务。除此之外,您应该应用适当的安全性来在服务级别对传入请求进行身份验证和授权。最后,如果这些部门位于不同的子网上,您可以过滤子网之间的 UDP 广播,前提是您拥有适当的网络基础设施。