Соединение канала WCF прервано с ошибкой: Произошла ошибка чтения из канала: Нераспознанная ошибка 109
Я разрабатываю службу WCF с обратным вызовом, используя привязку именованного канала. И когда я вызываю сервис с клиента, на стороне сервера трассировка показывает ошибку "Произошла ошибка чтения из канала: нераспознанная ошибка 109", и в итоге соединение канала было прервано. Но я понятия не имею, что вызвало проблему. Трассировка не дает больше информации, кроме трассировки стека:
System.ServiceModel.Channels.PipeConnection.OnAsyncReadComplete(Boolean haveResult, Int32 error, Int32 numBytes)
System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
и еще одна ошибка 109 с трассировкой стека
System.ServiceModel.Channels.PipeConnection.OnAsyncReadComplete(Boolean haveResult, Int32 error, Int32 numBytes)
Я подозревал, что это как-то связано с возвращаемым значением операции на основе потока операций трассировки. Но даже если я объявлю возвращаемый тип операции как void, я все равно получу эту ошибку. Другое дело, хотя я использую обратный вызов, но он не вызывает обратный вызов внутри операции.
Буду признателен за любую помощь или руководство по отладке прерванного соединения. Я уверен, что есть какой-то способ получить более подробную информацию. Например, как перехватить исключение, упомянутое выше (блок try try внутри операции сервера ничего не получает, как и вызывающая функция на стороне клиента).
2 ответа
Оказалось, что я не вызывал функцию client.Close() на каком-то этапе. Поэтому при выходе из клиентской программы канал был прерван, а сервер показал указанную ошибку.
Негабаритные сообщения могут вызвать эту ошибку. Вы отправляете много данных от клиента?
Я думаю, что у меня также было это, когда я отправлял перечисление, но значение не было допустимым значением перечисления.
Также здесь есть очень полезная информация о том, как отследить проблему.