void StartControlService() { controlServiceHost = null; Exception lastException = null; for (int iteration = 0; iteration < ListenerConstants.MaxRetries; iteration++) { controlServiceGuid = Guid.NewGuid(); string listenerEndPoint = controlServiceGuid.ToString(); try { Type contractType; if (transportType == TransportType.Tcp) { contractType = typeof(TcpWorkerProcess); } else { contractType = typeof(NamedPipeWorkerProcess); } ServiceHost typedServiceHost = new ServiceHost(contractType, Utility.FormatListenerEndpoint(serviceName, listenerEndPoint)); typedServiceHost.ServiceThrottle.MaxConcurrentSessions = ListenerConstants.RegistrationMaxConcurrentSessions; typedServiceHost.Description.Behaviors.Remove(typeof(ServiceMetadataBehavior)); typedServiceHost.AddServiceEndpoint(typeof(IConnectionRegister), CreateRegisterBinding(this.transportType), string.Empty); controlServiceHost = typedServiceHost; controlServiceHost.Open(); break; } catch (CommunicationException exception) { if (TD.ServiceStartPipeErrorIsEnabled()) { Uri formattedUri = Utility.FormatListenerEndpoint(serviceName, listenerEndPoint); TD.ServiceStartPipeError((formattedUri != null) ? formattedUri.ToString() : string.Empty); } if (DiagnosticUtility.ShouldTraceWarning) { ListenerTraceUtility.TraceEvent(TraceEventType.Warning, ListenerTraceCode.ServiceStartPipeError, SR.GetString(SR.TraceCodeServiceStartPipeError), this, exception); } lastException = exception; controlServiceHost = null; } } if (controlServiceHost == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new InvalidOperationException(SR.GetString(SR.ServiceStartErrorEndpoint, this.serviceName), lastException)); } }