Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCF: Faulted state (обрыв канала), WCF обрывается канал через 9 часов работ 
:(
    Опции темы
Anj78Y
Дата 24.4.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Есть Сервер и Клиент. Клиент подключается к Серверу по дуплексному каналу.
После подключения нормально работает без малейших проблем.
Клиент каждые 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);
            }
        }


PM MAIL   Вверх
mr.DUDA
Дата 25.4.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Сервер случайно не в IIS хостится ?


--------------------
user posted image
PM MAIL WWW   Вверх
Anj78Y
Дата 29.4.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 25.4.2008,  09:28)
Сервер случайно не в IIS хостится ?

Нет, обычный Windows service.

По проведенным тестам выяснили следующую дополнительную информацию:

У нас на сервере и на клиентах стоит Net. Framework 3.0 (этого небыло указано в описании проблемы)
при установки Net. Framework 3.0 SP1 или  Net. Framework 3.5 проблема самоликвидировалась.

Вполне возможно это какойто баг в 3-ем Framework.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.