Я пытаюсь достичь следующего: один клиентский экземпляр прокси (открытый), доступ к которому осуществляется несколькими потоками, используя надежный сеанс. До сих пор мне удалось получить либо 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). Первый факт указывает на то, что в коде нет ничего плохого (действительно, я проверял, что не исключены исключения), а последнее просто меня путает, и именно поэтому я изменил настройки надежной привязки сеанса.
Я совсем застрял на этом. Может ли кто-нибудь предположить, почему надежная сессия будет виновата таким образом?