2012-03-29 44 views
0

我正在設計一個WCF服務和使用命名管道進行回調的客戶端,當服務器處理來自客戶端的請求時,出現錯誤#109,最終導致管道連接中止。以下是服務器端的跟蹤文件。如果字體太小而無法看到,我應該簡單地解釋它:WCF管道連接由於錯誤而中止#109

當客戶端向服務器發出請求時,發生了紅色標記的三個異常。該函數非常簡單,將一個字符串變量傳遞給服務器。這個錯誤是#109(連續3次例外,如果這個數字意味着什麼),它不會提供更多信息。在這個活動中,管道連接最終被中止。另外奇怪的是,我們可以看到「接收連接字節...」(處理消息)之後的下一個活動,它實際上已經過了,這意味着服務器端處理確實通過傳入的參數進行了調用。這可以在調試器中驗證,因爲在服務器端操作確實獲得了傳遞字符串。另外,操作功能裏面,如果我嘗試

Dim callback = OperationContext.Current.GetCallbackChannel(Of ISSLServiceCallback)() 
If DirectCast(callback, ICommunicationObject).State = CommunicationState.Opened Then 
    DoSomething() 
End If 

它實際上進入if語句,我猜表示該通道實際上是活的那麼遠。

感謝您的幫助!

Tracing details

回答

0

此異常意味着服務器側WCF通道堆棧遇到操作系統錯誤ERROR_BROKEN_PIPE 109 (0x6D) The pipe has been ended。這表明您的客戶端可能已在服務寫入其響應或與回調通道交互時斷開連接。

我知道NetnamedPipeBinding中的ERROR_BROKEN_PIPE的一個原因是客戶端和服務器各自的綁定配置之間的安全預期不匹配的某種模式 - 我建議您檢查兩端一致性的安全配置。

如果您想獲得更多幫助,請發佈您的客戶端和服務代碼,端點配置以及您在日誌跟蹤中看到的每個異常的堆棧跟蹤和其他詳細信息。

0

我知道這是一箇舊線程,但我碰到完全相同的問題。

原來的客戶端代理正在關閉這樣的:

client.Abort(); 
client.Close(); 

..而不是沿着線的東西:

try 
{ 
    client.Close(); 
} 
catch (Exception ex) 
{ 
    client.Abort(); 
} 

..這得到了在擺脫所有的erors的WCF跟蹤文件。

相關問題