public DefaultDiscoveryService( DiscoveryServiceExtension discoveryServiceExtension, DiscoveryMessageSequenceGenerator discoveryMessageSequenceGenerator, int duplicateMessageHistoryLength) : base(discoveryMessageSequenceGenerator, duplicateMessageHistoryLength) { Fx.Assert(discoveryServiceExtension != null, "The discoveryServiceExtension must be non null."); this.publishedEndpoints = discoveryServiceExtension.PublishedEndpoints; }
void IServiceBehavior.Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { if (serviceDescription == null) { throw FxTrace.Exception.ArgumentNull("serviceDescription"); } if (serviceHostBase == null) { throw FxTrace.Exception.ArgumentNull("serviceHostBase"); } List <ServiceEndpoint> appEndpoints = this.GetApplicationEndpoints(serviceDescription); DiscoveryServiceExtension discoveryServiceExtension = serviceHostBase.Extensions.Find <DiscoveryServiceExtension>(); if (discoveryServiceExtension == null) { if (serviceDescription.Endpoints.Count > appEndpoints.Count) { discoveryServiceExtension = new DefaultDiscoveryServiceExtension(DiscoveryDefaults.DuplicateMessageHistoryLength); } else { discoveryServiceExtension = new DefaultDiscoveryServiceExtension(0); } serviceHostBase.Extensions.Add(discoveryServiceExtension); } for (int i = 0; i < appEndpoints.Count; i++) { appEndpoints[i].Behaviors.Add( new EndpointDiscoveryMetadataInitializer( discoveryServiceExtension.InternalPublishedEndpoints)); } }
void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { if (serviceDescription == null) { throw FxTrace.Exception.ArgumentNull("serviceDescription"); } if (serviceHostBase == null) { throw FxTrace.Exception.ArgumentNull("serviceHostBase"); } DiscoveryServiceExtension discoveryServiceExtension = serviceHostBase.Extensions.Find <DiscoveryServiceExtension>(); if (discoveryServiceExtension != null) { DiscoveryService discoveryService = discoveryServiceExtension.ValidateAndGetDiscoveryService(); ServiceDiscoveryBehavior.SetDiscoveryImplementation(serviceHostBase, discoveryService); if (this.announcementEndpoints.Count > 0) { serviceHostBase.ChannelDispatchers.Add( new OnlineAnnouncementChannelDispatcher( serviceHostBase, this.announcementEndpoints, discoveryServiceExtension.InternalPublishedEndpoints, discoveryService.MessageSequenceGenerator)); serviceHostBase.ChannelDispatchers.Insert(0, new OfflineAnnouncementChannelDispatcher( serviceHostBase, this.announcementEndpoints, discoveryServiceExtension.InternalPublishedEndpoints, discoveryService.MessageSequenceGenerator)); } } }
internal DiscoveryEndpointPublisherBehavior(DiscoveryServiceExtension extension) { this.extension = extension; }