protected override void OnStart(HttpServerBase.StartStopContext context, ref bool isRunning) { this.DisposeOldServiceHost(); ServiceHost newHost = new ServiceHost(new WcfHttpServerService(this)); try { var useHttps = this.UseSecureHttp; int port; if (useHttps) { port = this.Port ?? DEFAULT_PORT_SECURE_HTTP; } else { port = this.Port ?? DEFAULT_PORT_HTTP; } var baseUrl = new Uri(string.Format("http{0}://localhost:{1}", useHttps ? "s" : string.Empty, port)); HttpTransportBindingElement transport; if (useHttps) { transport = new HttpsTransportBindingElement(); // SSL certificate newHost.Credentials .ClientCertificate .Certificate = this.SslCertificate; } else { transport = new HttpTransportBindingElement(); } transport.KeepAliveEnabled = false; transport.MaxBufferPoolSize = int.MaxValue; transport.MaxBufferSize = int.MaxValue; transport.MaxReceivedMessageSize = int.MaxValue; transport.TransferMode = ToWcfTransferMode(this.TransferMode); var credValidator = this.CredentialValidator; if (credValidator != null) { transport.AuthenticationScheme = AuthenticationSchemes.Basic; newHost.Description.Behaviors.Remove <ServiceCredentials>(); newHost.Description.Behaviors.Add(new PasswordCredentials(credValidator)); } else { transport.AuthenticationScheme = AuthenticationSchemes.Anonymous; } var binding = new CustomBinding(WcfHttpServerService.CreateWebMessageBindingEncoder(), transport); newHost.AddServiceEndpoint(typeof(IWcfHttpServerService), binding, baseUrl); newHost.Open(); this.Host = newHost; } catch { // dispose before rethrow exception ((IDisposable)newHost).Dispose(); throw; } }
protected override void OnStop(HttpServerBase.StartStopContext context, ref bool isRunning) { this.DisposeOldServiceHost(); }