2011-08-26 158 views
45

我有一個WCF Web服務工作正常。但是有一個特定的呼叫失敗 - 但只對某些用戶失敗。這個調用非常簡單 - 這是一個獲取Person對象列表的調用。現有連接被遠程主機強行關閉 - WCF

對於用戶A,它工作正常。該服務查詢數據庫,創建Person對象列表並將其返回給調用應用程序。

對於用戶B它失敗。奇怪的是,當我調試服務似乎工作正常。它能夠查詢數據庫並創建List對象並將其返回。服務本身從未失敗。但客戶端應用程序收到「現有連接被遠程主機強行關閉」錯誤。

對我來說,當服務層嘗試打包XML格式的數據以發送回調用應用程序時,似乎發生了一些情況。我認爲它必須是一個數據相關的問題,因爲這個調用對其他用戶來說工作正常。我直觀地看了看數據,並沒有看到任何奇怪的東西。一個猜測是,用戶B的數據有一些時髦的隱藏字符或什麼,因此導致服務意外關閉。類似的東西。

任何想法?

+0

也許它有幫助 - 我已經從客戶端調用服務時從服務器中刪除了Web服務應用程序,並且在錯誤日誌中出現了此錯誤。 – xameeramir

回答

71

我發現的診斷類似事情的最好的東西是服務跟蹤查看器。這是非常簡單的設置(假設你可以編輯CONFIGS):

http://msdn.microsoft.com/en-us/library/ms732023.aspx

希望這有助於。

+12

This helps!我有一個類似的問題,在我的情況下,ServiceTraceViewer顯示我試圖序列化枚舉值時拋出異常。該操作試圖返回一個包含此枚舉的對象,而不先初始化它,並且枚舉定義沒有默認值(0)的成員。所以它不能序列化0. –

+0

我這樣做,它使我能夠找出問題。在我的情況下,這是一個NullReferenceException在序列化回客戶端。以下是我想知道的:爲什麼我最初的例外被埋在這個連接問題中?甚至沒有任何內在的例外,但這是問題的原因。這是遲緩的,我需要想出一個辦法來克服這一點。我可能會發佈一個新的問題idk ... – toddmo

11

我曾見過這一次。用戶是否請求不同數量的數據?我發現,即使您可以配置數據有效負載的綁定(即maxReceivedMessageSize),httpRuntime也會勝過WCF設置,因此如果IIS嘗試提供超出該請求的請求,則會出現此問題。

把它看成是這樣的:

如果maxReceivedMessageSize是在你的WCF行爲12MB,並且maxRequestLength爲4MB(默認),IIS獲勝。

+2

我不認爲這是它。我嘗試修改返回的數據以減少它,但它不起作用。普通查詢返回63行。我改變它只返回1行,它仍然失敗。用戶A的數據返回26行,它工作正常。當我修改用戶B的數據只返回1行時 - 仍然失敗。很奇怪。 –

22

我有這個問題,因爲我的網站沒有綁定到SSL端口的證書。我想我會提到它,因爲我沒有在googleweb的任何地方找到這個答案,並花了我數小時才弄明白。事件查看器中沒有任何內容顯示,這對於診斷它非常棒。希望這節省了別人的痛苦。

6

我只是現在這個錯誤只在服務器和解決方案是設置WCF的web.config 一個maxItemsInObjectGraph屬性下<behavior>標籤:

<dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
3

我已經釣到了同樣的異常,發現在InnerException: SocketException. svclog跟蹤。

查看Windows事件日誌後,我看到來自System.ServiceModel.Activation.TcpWorkerProcess類的錯誤。

您是否在IIS中使用netTcpBinding和端口共享託管您的wcf服務?

似乎有在IIS端口共享功能中的錯誤,請檢查fix

我的解決辦法是舉辦WCF服務在Windows服務。

+0

這是用於舊版本的IIS,比如6?由於「修復」是從2011年,並且下載鏈接甚至已經消失... –

3

我有同樣的問題。我的解決辦法是這樣的:如果你在項目中使用LINQ2SQL

,打開在Visual Studio中的dbml文件,並更改序列化模式爲「單向」的

3

拉我的頭髮像這種完全沒用的6小時後錯誤,我的問題最終是因爲我的data transfer objects太複雜。開始與超級簡單的屬性,如public long Id { get; set;}就是這樣......沒有什麼幻想。

+1

我的對象有遞歸引用。 –

2

我的問題也是序列化。原因是我的一些DTO /商業類和屬性被重新命名或刪除而未更新服務引用。我很驚訝,我沒有得到contract filter mismatch error。但更新服務參考修復了我的錯誤(與OP相同的錯誤)。

2

在我的情況下,它也是序列化。我需要爲可能出現在序列化中的所有類添加 [KnownType(typeof(...)]

7

我發現如果返回的對象只有在構造函數中初始化的只有getter屬性的自動屬性(使用C#6.0語法),則可以得到此錯誤。

我相信這是由於WCF使用無參數構造函數反序列化客戶端上的對象,然後設置對象的屬性。它需要有一個set可用(它可以是私人的)來填充對象,否則它會失敗。

+0

O ....我的......上帝......非常感謝你的回答。我想知道爲什麼這些在編譯時沒有提及或被捕獲。 – DdW

相關問題