Открытое соединение прокси WCF вызывает ошибки - PullRequest
2 голосов
/ 21 марта 2012

Мы используем службы WCF, размещенные на IIS на среднем уровне, и используем клиент WPF.Мы видим эти ошибки в наших производственных журналах.От Google я указал на ссылку здесь http://kennyw.com/indigo/150, которая ясно говорит, что эта ошибка связана с MaxConcurrentSessions.

В подробностях производственного журнала ниже говорится, что ошибка происходит, когда клиент WPF пытается открытьПодключение прокси WCF с использованием ICommunicationObject.Open () Эта ошибка в нашей производственной системе происходит очень часто, но я не могу воспроизвести эту ошибку на моей локальной установке.Я попытался изменить значение MaxConcurrentSessions на 1, а затем открыл 5 экземпляров приложения WPF. В приложении WPF на панели мониторинга по умолчанию каждые 1 минуту выполняется таймер, пытающийся получить данные, но я все еще не могу воспроизвести эту ошибку.

Мой вопрос на самом деле, когда возникает эта ошибка, по ссылке выше написано, что это происходит, когда сервер перегружен, но в моем тестовом примере выше он должен был быть загружен.Мне также нужно иметь возможность воспроизвести это, чтобы даже попытаться исправить.

Любые идеи, если я нахожусь на правильном пути, является ли MaxConcurrentSessions подходящим местом для изучения и как мне моделировать это на локальном компьютере.Пожалуйста, помогите.

2/16/2012 4:10:40 PM:Information:Exception in the ServiceCall constructor:       System.ServiceModel.CommunicationException: 
  The socket connection was aborted. 
  This could be caused by an error processing your message or a receive timeout being   exceeded by the remote host, or an underlying network resource issue. 
  Local socket timeout was '00:00:59.9687730'. --->System.Net.Sockets.SocketException: 
An existing connection was forcibly closed by the remote host at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
 --- End of inner exception stack trace ---
 Server stack trace: 
 at System.ServiceModel.Channels.SocketConnection.ReadCore(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing)
 at System.ServiceModel.Channels.SocketConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
 at System.ServiceModel.Channels.DelegatingConnection.Read(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout)
 at System.ServiceModel.Channels.ConnectionUpgradeHelper.InitiateUpgrade       (StreamUpgradeInitiator upgradeInitiator, IConnection& connection, ClientFramingDecoder decoder, IDefaultCommunicationTimeouts defaultTimeouts, TimeoutHelper& timeoutHelper)
 at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)
 at  System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.DuplexConnectionPoolHelper.AcceptPooledConnection(IConnection connection, TimeoutHelper& timeoutHelper)
 at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
 at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
 at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
 at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
 at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)

Ответы [ 3 ]

2 голосов
/ 21 марта 2012

Существует высокая вероятность того, что основной причиной вашей проблемы является неправильное удаление экземпляров прокси-серверов службы в вашем приложении WPF.Посмотрите, как создаются прокси и утилизируются .

Если ваш код не соответствует одному из шаблонов, описанных в ответах на этот ТА вопрос , тогда выне освобождаем TCP-соединения должным образом.Эта проблема имеет тенденцию всплывать чаще всего при использовании привязок, которые зависят от сеансов TCP.

0 голосов
/ 29 ноября 2013

Поместите эту строку в App.Config на стороне потребителя

<system.net>
   <defaultProxy useDefaultCredentials="true">
     <proxy usesystemdefault="True" bypassonlocal="True"/>
  </defaultProxy>
 </system.net>
0 голосов
/ 21 марта 2012

Может быть несколько причин для этой ошибки. MaxConcurrentSessions является одним из них.

В вашем конфигурационном файле для сервера и клиента обязательно увеличьте значения receiveTimeout и sendTimeout . Возможно, вы превышаете время, разрешенное этими параметрами.

Необходимо убедиться, что и сервер, и клиент имеют одинаковые значения конфигурации для этих полей. Если вы поменяете только одну из них, другая все равно может выйти из строя раньше.

Кроме того, ссылка на MS для их XML-конфигураций приведена ниже и может помочь вам найти причину проблемы.

http://msdn.microsoft.com/en-us/library/ms731354.aspx

...