Сбой надежного сеанса по неизвестной причине - PullRequest
19 голосов
/ 17 июля 2009

Я пытаюсь добиться следующего - один экземпляр прокси на стороне клиента (остается открытым), доступ к которому осуществляется несколькими потоками с использованием надежного сеанса . До сих пор мне удавалось иметь либо А) надежный сеанс с прокси на стороне клиента, который создается и удаляется для вызова, либо Б) то, к чему я стремлюсь, но без надежного сеанса.

Однако, когда я включаю надежные сеансы в моей привязке, проявляется следующее поведение:

на стороне клиента

При запуске приложения все работает нормально до примерно 18 сообщений в сеансе WCF. Сначала я получаю событие proxy.InnerChannel.Faulted, затем происходит исключение в точке, где я вызываю метод на прокси. Исключением является System.TimeoutException с сообщением:

"Время ожидания канала запроса при ожидании ответа после 00: 00: 59,9062512. Увеличьте значение тайм-аута, переданное вызову Запрос или увеличение значения SendTimeout в привязке. Время выделенный на эту операцию, возможно, был частью более длительного Тайм-аут ".

Внутреннее исключение имеет похожее сообщение:

"Операция запроса не завершена в течение выделенного времени ожидания 00:01:00. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута. "

При методе в верхней части трассировки внутреннего стека:

System.ServiceModel.Channels.ReliableRequestSessionChannel.SyncRequest.WaitForReply(TimeSpan timeout)

Затем я вызываю proxy.Close, за которым следует proxy.Abort (перехват и игнорирование исключений). Если я использую настройки по умолчанию (т. Е. Просто <reliableSession/>), то вызываю прокси. Закрытие приводит к другому исключению System.Timeout (хотя на этот раз назначенное время ожидания равно 00:00:00), однако, если я переопределяю значения по умолчанию, как указано выше, исключение не выдается.

Служащие сторона

Используя трассировку WCF, я получаю System.ServiceModel.CommunicationException с сообщением:

"Последовательность была прервана удаленной конечной точкой. Сеанс перестал ждать конкретного ответа. Из-за этого надежный сеанс не может продолжаться Надежный сеанс был сорван. "

И трассировка стека, заканчивающаяся в:

System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)

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

Меня озадачивает то, что служба стабильна и работает с вариантами A) или B), как описано в начале моего сообщения, и происходит после разного количества сообщений (около 18). Первый факт указывает на то, что в коде нет ничего плохого (на самом деле я проверил, что не генерируются никакие исключения), а второй просто сбивает меня с толку, и именно поэтому я изменил настройки надежной привязки сессии.

Я застрял на этом. Кто-нибудь может подсказать, почему такой надежный сеанс будет таким же?

1 Ответ

1 голос
/ 23 августа 2014

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

ИЛИ наиболее вероятная причина

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

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

введите http-имя вашего локального хоста и установите время ожидания на 5,00 мин. и, возможно, даже изменить время запроса. Время ожидания запроса 2,00 мин

closeTimeout = "00:05:00"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...