在服務端呼叫 WCF 服務(NetTcpBinding)時,我看到在客戶端有以下例外的日志。但關鍵部分甚至是客戶端在其應用程式中面臨例外,但請求已成功命中 WCF 服務。
訊息:預計會有更多資料,但已達到 EOF。
訊息:在流的位置 1 讀取訊息幀格式時出錯(狀態:開始)堆疊跟蹤:
在 System.ServiceModel.Channels.ClientDuplexConnectionReader.EnsureDecoderAtEof()
在 System.ServiceModel.Channels.SessionConnectionReader.Receive(TimeSpan timeout)
在系統。 ServiceModel.Channels.SynchronizedMessageSource.Receive(TimeSpan timeout)
at System.ServiceModel.Channels.TransportDuplexSessionChannel.Receive(TimeSpan timeout)
at System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceive(TimeSpan timeout, Message& message)
at System.ServiceModel.Dispatcher.DuplexChannelBinder .Request(訊息訊息,TimeSpan 超時)
在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 訊息) 例外重新拋出
我懷疑它可能是由于以下原因而發生的,因為由于某些安全問題,我無法看到發送到 WCF 服務的資料。場景:
- 發送到 WCF 服務的資料可能具有 EOF 字符。
- 發送到 WCF 服務的資料大小將大于在客戶端的 WCF 配置中配置的大小 (maxReceivedMessageSize)。
我試圖在我的本地機器上重現該場景,但我無法重現它。對于第一種情況,我將 EOF 位元組 (0x1A) 包含在要發送到 WCF 服務的有效負載資料中。但它不會在客戶端拋出任何例外。對于第二種情況,我將 maxReceivedMessageSize 值配置為小于有效負載資料大小,它會引發例外,但它是不同的例外。
此例外的原因可能是什么?如何在我的本地重現此例外?
uj5u.com熱心網友回復:
問題是由于負載平衡器超時配置。
EOF 例外發生在客戶端,當 WCF 服務處理請求超過負載均衡器配置時間時。
感謝@Lan Huang 引導我走向正確的方向。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/515466.html
標籤:C#wcf
上一篇:使用XmlSerializer的SoapCoreWCFC#程式不會使用帶有CancellationToken的異步方法創建WSDL
下一篇:C 生成可變數量的嵌套FOR回圈
