Подтвердить что ты не робот

Надежная проверка сеанса по неизвестной причине

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

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

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

При запуске приложения все работает нормально, пока в сеанс WCF не поступит примерно 18 сообщений. Сначала я получаю событие 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, я получаю a System.ServiceModel.CommunicationException, с сообщением:

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

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

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

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

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

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

4b9b3361

Ответ 1

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

ИЛИ, скорее всего, причина

ваши выделенные таймауты могут быть добавлены как непрерывный единичный тайм-аут 18 минут или 18 вызовов. Другие времена использования добавляются вместе как один полный тайм-аут. Именно поэтому он просит больше времени.

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

введите имя локального хоста http-привязки и установите время закрытия в 5:00 мин. и, возможно, даже изменить время запроса. Requesttimeout 2.00 min

closeTimeout = "00:05:00"