2010-09-03 118 views
7

我有一個WCF客戶端/服務與net.tcp傳輸。當我打開客戶端的WCF跟蹤時,我在跟蹤中看到以下錯誤(請參閱服務跟蹤查看器的截圖)。奇怪的是,WCF正在處理和恢復這個錯誤,我的客戶端沒有收到任何異常,並繼續工作。這種異常發生頻繁,隨機,但不是每個Web方法調用。 客戶端(Windows XP)身份驗證是Windows,服務由SPN標識,服務在NLB(Windows Server 2003)後面的Windows服務上自託管。 任何人都可以解釋我在這裏發生了什麼。奇怪的WCF net.tcp異常

從跟蹤XML的異常堆棧跟蹤是:

<ExceptionString> 
System.ServiceModel.Security.MessageSecurityException: The server rejected the upgrade request. ---&gt; System.ServiceModel.ProtocolException: Error while reading message framing format at position 0 of stream (state: ReadingUpgradeRecord) ---&gt; System.IO.InvalidDataException: More data was expected, but EOF was reached. 
    --- End of inner exception stack trace --- 
    --- End of inner exception stack trace --- 
</ExceptionString> 

Screenshot

+1

作爲背景,我們的一些用戶報告了很多例外,我正在調查爲什麼只有一些PC似乎擁有它。所以我在自己的電腦上開始了一個服務跟蹤,我很驚訝,因爲這些例外從未被客戶收到,WCF正在吞噬它們。 我在想這個MessageSecurityException是否最終導致一些客戶端獲得真正的異常。 某些客戶端記錄此例外情況: 無法連接到net.tcp:// myservice:9501/SomeService。連接嘗試持續時間爲00:00:21.3873440。 TCP錯誤代碼10060: – softveda 2010-09-03 01:06:55

+0

您提到了NLB。你使用粘性會話(會話親和力)? – 2010-09-03 07:55:37

+1

端口規則中沒有NLB會話關聯無。該服務使用自定義net.tcp綁定,2分鐘空閒超時和1分鐘超時退出。但是,我發現我們意外地使用了persession instancecontextmode,因爲有人認爲這是默認設置。我很快就會把它改成percall。 – softveda 2010-09-08 10:47:01

回答

-3

不知道什麼叫真正的問題可能是,如果它涉及到流媒體(我會潛水)。無論如何,你可以嘗試捕捉服務器端的異常,並拋出CommunicationException

catch (Exception ex) 
{ 
    throw new CommunicationException(ex.Message, ex); 
} 

這樣客戶端代理不應該忽略異常,它的狀態應該是「Faulted」。