首先服务发现的目的就是为了解决服务和服务消费者的解耦,以往正常的通信客户端需要知道服务的地址。
wcf4.0为我们提供了2种模式的服务发现模型,一种是Managed proxy Discovery模型,一种是ad-hoc模式。
Managed proxy Discovery模型,采取的集中管理方式对服务的终结点进行管理,首先它自己本身以一个服务来提供终结点的管理功能。这个服务需要继承自System.ServiceModel.Discovery.DiscoveryProxy,需要对基类方法进行重写
主要的方法有OnBeginOnlineAnnouncement,OnEndOnlineAnnouncement,OnBeginOfflineAnnouncement,OnEndOfflineAnnouncement(用于服务的上下线通知)
OnBeginFind,OnEndFind(服务消费端的查找)
对外暴露2个终结点,一个是DiscoveryEndpoint,用于服务消费者查找服务,一个是AnnouncementEndpoint,供服务上下线通知。
当一个服务想实现可以被发现的功能,那么它就得在服务启动后通知Managed proxy Discovery服务。方法就是这个服务添加一个AnnouncementEndpoint,并且添加ServiceDiscoveryBehavior的行为。
最后剩下服务的消费者如何查找服务并建立连接。
服务消费者(可以使客户端,也可以是一个服务)要添加DiscoveryEndpoint
EndpointAddress address = null;
FindResponse result = null;
using (var discoveryClient = new DiscoveryClient(discoveryEndpoint))
{
result = discoveryClient.Find(new FindCriteria(typeof(要查找的服务契约)));
}
if (result != null && result.Endpoints.Any())
{
//使用的是查找到的匹配的终结点的地址
var endpointMetadata = result.Endpoints.First();
address = endpointMetadata.Address;
}