2012-03-30 26 views
1

我正在使用命名管道綁定來設計帶回調的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,仍然會出現此錯誤。另一件事是雖然我使用回調,但它不會在操作中調用回調。

任何幫助將不勝感激,或指導我如何調試管道連接中止,我敢打賭有一些方法來獲得更詳細的信息。例如,如何捕捉上面提到的異常(在服務器操作中嘗試catch塊沒有得到任何東西,客戶端調用函數也沒有)。

回答

1

原來我在某個階段沒有調用client.Close()函數。所以當客戶端程序退出時,通道被中止,服務器顯示提到的錯誤

0

過大的郵件可能會導致此錯誤。你是否從客戶端發送大量數據?

我想我也有它,當我發送枚舉,但價值不是一個有效的枚舉值。

還有一些非常有用的信息here關於追蹤問題。

+0

感謝您的回覆。我還了解到,過高的回覆或枚舉值可能會導致此問題。起初我返回一個枚舉,但現在我改變它返回布爾(正如我所說我甚至改變了功能作爲void,但仍然有這個問題)。另一件事是在你的鏈接上,它表示客戶端得到了109錯誤,而在我的情況下,我把它在服務器上,沒有任何其他有用的信息,比如他有什麼,比如序列化錯誤。我相信這個失敗的理由有一些例外,但我不知道該在哪裏捕捉它。 – tete 2012-03-30 11:08:04