private static IChannelFactory <TService> CreateChannelFactory <TService>(Uri uri) where TService : class { var binding = (NetTcpBinding)CreateDefaultEndpointBinding(uri); var securityMode = ServiceSecurityMode.GetSecurityModeFromConfig(); binding.SetBindingSecurity(securityMode); binding.MaxBufferSize = 2147483647; binding.MaxReceivedMessageSize = 65536; binding.CloseTimeout = new TimeSpan(0, 5, 0); //updated service RecieveTimeout to 3 minutes instead of default binding.ReceiveTimeout = TimeSpan.FromMinutes(3); #if DEBUG binding.SendTimeout = TimeSpan.MaxValue; binding.OpenTimeout = TimeSpan.MaxValue; binding.ReceiveTimeout = TimeSpan.MaxValue; binding.CloseTimeout = TimeSpan.MaxValue; #endif binding.EnableTransactionFlowAndReliableMessaging(); var serviceUriBuilder = new UriBuilder(uri); serviceUriBuilder.Path = string.Format("{0}/{1}", serviceUriBuilder.Path, securityMode.PathExtension); var address = CreateEndpointAddress(serviceUriBuilder.Uri, null); var cf = new ChannelFactory <TService>(binding, address); cf.AddGenericResolver(); cf.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; var certMode = securityMode as X509CertificateServiceSecurityMode; if (certMode != null) { cf.Credentials.ClientCertificate.Certificate = certMode.TransportCertificate; } return(cf); }