private void SetListenUri(ServiceEndpoint endpoint, Binding binding, Uri listenUri)
 {
     endpoint.UnresolvedListenUri = listenUri;
     endpoint.ListenUri           = ServiceHost.MakeAbsoluteUri(listenUri, binding, this.host.InternalBaseAddresses);
 }
        /// <summary>
        /// Create a new service endpoint and add it to Description
        /// </summary>
        /// <param name="contractType">interface annotated with [ServiceContract]</param>
        /// <param name="binding">protocol to use for communication</param>
        /// <param name="address">absolute address for service, or address relative to base address for supplied binding</param>
        /// <returns>The endpoint which was created</returns>
        public ServiceEndpoint AddServiceEndpoint(Type contractType, Binding binding, Uri address)
        {
            CheckArgument(contractType, "contractType");
            CheckArgument(binding, "binding");
            CheckArgument(address, "address");

            ContractDescription contract = this.host.ImplementedContracts == null
                ? null
                : this.host.ImplementedContracts.Values.FirstOrDefault(implementedContract => implementedContract.ContractType == contractType);

            if (contract == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("contractType", SR.GetString(SR.SFxMethodNotSupportedByType2, this.host.Description.ServiceType, contractType));
            }

            ServiceEndpoint endpoint = new ServiceEndpoint(contract, binding, new EndpointAddress(ServiceHost.MakeAbsoluteUri(address, binding, this.host.InternalBaseAddresses)));

            this.AddServiceEndpoint(endpoint);
            return(endpoint);
        }