/// <summary> /// Creates a new service endpoint /// </summary> public ServiceEndpoint(EndpointDescription description, IEndpointBinding binding) { this.m_description = description; this.m_dispatcher = new EndpointDispatcher(this); this.m_operations = description.Contract.Operations.Select(o => new EndpointOperation(this, o)).ToList(); this.m_binding = binding; }
/// <summary> /// Registers the service behavior <paramref name="contractType"/> at base Uri <paramref name="baseUri"/> /// </summary> public ServiceEndpoint AddServiceEndpoint(Uri baseUri, Type contractType, IEndpointBinding binding) { if (baseUri == null) { throw new ArgumentNullException(nameof(baseUri)); } else if (contractType == null) { throw new ArgumentNullException(nameof(contractType)); } else if (this.m_endpoints.Any(o => o.Description.RawUrl == baseUri.ToString())) { throw new InvalidOperationException("Another endpoint has already been registered with this base URI"); } else if (!contractType.IsAssignableFrom(this.m_serviceType)) { throw new InvalidOperationException($"{this.m_serviceType.FullName} does not implement contract {contractType.FullName}"); } var ep = new ServiceEndpoint(new EndpointDescription(baseUri, contractType), binding); this.m_endpoints.Add(ep); return(ep); }