Есть Сервер и Клиент. Клиент подключается к Серверу по дуплексному каналу.
После подключения нормально работает без малейших проблем.
Клиент каждые 2 минуты вызывает у сервера функцию CheckConnection для того, чтобы держать канал постоянно открытым.
Проблема состоит в том что через 9 часов нормальной работы на клиенте возникает исключение (см. ниже) а на с сервере канал переходит в Faulted state. После этого клиент переподключается (внутренняя логика работы клиента) и продолжает работать следующие 9 часов без проблем.
Подскажите в чем может быть причина. Мои догадки это время жизни сессии, если я прав, где установить это время?
Ошибка на клиенте:
Message: The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.
StackTrace:
Server stack trace: 
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at PT.DTL.IPTService.CheckConnection()
   at PT_BLL.Biz_objects.BizServerOperation.CheckConnection()
Настройки канала на клиенте :
        public static void CreateChannel()
        {
            try
            {
                callbackClass = new PosForLSCallback();
                instanceContext = new InstanceContext(callbackClass);
                Uri uri = new Uri(_uri);
                NetTcpBinding binding = new NetTcpBinding();
                binding.Security.Mode = SecurityMode.Message;
                binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue;
                binding.ReliableSession.Ordered = true;
                binding.ListenBacklog = 1000;
                binding.MaxConnections = 1000;
                binding.MaxReceivedMessageSize = 294967296;
                binding.MaxBufferSize = 294967296;
                binding.ReaderQuotas.MaxArrayLength = 294967296;
                binding.ReaderQuotas.MaxBytesPerRead = 294967296;
                binding.ReaderQuotas.MaxStringContentLength = 294967296;
                binding.OpenTimeout = TimeSpan.FromSeconds(30);
                binding.Security.Message.AlgorithmSuite
                     = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Rsa15;
                binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
                EndpointAddress ad = new EndpointAddress(
                    uri,
                    new DnsEndpointIdentity(BasicObject.CERTIFICATE_CAFE),
                    new AddressHeaderCollection());
                factoryLS = new DuplexChannelFactory<IPOSService>(instanceContext, binding, ad);
                factoryLS.Credentials.ServiceCertificate.Authentication.CertificateValidationMode
                    = System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;
                factoryLS.Credentials.ServiceCertificate.Authentication.TrustedStoreLocation = StoreLocation.LocalMachine;
                factoryLS.Open();
                channel = factoryLS.CreateChannel();
            }
            catch (Exception ex)
            {
                VS2Exception.WriteError("CreateChannel", ex);
                Console.WriteLine(ex.Message);
            }
        }
Настройки канала на сервере:
        private static void createPOSHost()
        {
            try
            {
                NetTcpBinding binding = binding = new NetTcpBinding(SecurityMode.Message);
                binding.MaxReceivedMessageSize = 294967296;
                binding.MaxBufferSize = 294967296;
                binding.ReaderQuotas.MaxArrayLength = 294967296;
                binding.ReaderQuotas.MaxBytesPerRead = 294967296;
                binding.ReaderQuotas.MaxStringContentLength = 294967296;
                binding.OpenTimeout = TimeSpan.FromSeconds(30);
                binding.ReliableSession.Ordered = true;
                binding.ListenBacklog = 1000;
                binding.MaxConnections = 1010;
                binding.ReceiveTimeout = TimeSpan.FromSeconds(VS2Settings.Instance().TerminalQueryInterval + TimeoutIncrease);
                binding.Security.Message.AlgorithmSuite
                 = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128Rsa15;
                binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
                _posHost = new ServiceHost(typeof(POSService));
                _posHost.AddServiceEndpoint(
                    typeof(POS.DTL.IPOSService),
                    binding,
                    string.Format(BasicObjects.ConfigUtil.GetValue(LSARegistryKeys.POSService),
                        BasicObject.LSForPOSPort).Replace("[LS_IP]", LSIP));
                _posHost.Credentials.ServiceCertificate.Certificate = new X509Certificate2(Certs.VS2CAFE, "",
 		X509KeyStorageFlags.PersistKeySet);
                ServiceThrottlingBehavior stb = new ServiceThrottlingBehavior();
                stb.MaxConcurrentCalls = 1010;
                stb.MaxConcurrentInstances = 1010;
                stb.MaxConcurrentSessions = 1010;
                _posHost.Description.Behaviors.Add(stb);
                _posHost.Faulted += new EventHandler(_posHost_Faulted);
                _posHost.Open();
            }
            catch (Exception ex)
            {
                _log.Error(ex);
            }
        }