WCF的代碼實例網上到處都是,但是在實際的使用過程中總會出現很多問題,我就我在項目中使用WCF碰到的問題做個總結:
(注:要看到服務端真正異常配置includeExceptionDetailInFaults="true")
一。現象:界面假死不拋出任何異常(按常理超過等待時間應該拋出超時異常但是沒有拋出不知道是什麼原因)或拋出超時異常。
代碼環境:WinForm+netTcpBinding。
原因分析:因為netTcpBinding和wsHttpBinding都是有狀態連接所以造成這種現象可能是沒有及時釋放資源或當前會話數超過maxConcurrentSessions配置節配置數。basicHttpBinding是無狀態連接所以不存在此問題
解決方法:及時釋放資源,增大maxConcurrentSessions配置數
二。現象:超時異常。
代碼環境:WinForm+netTcpBinding
原因分析:造成這個現象會有很多原因1.接受信息長度超過maxReceivedMessageSize配置節配置數。2.返回數組長度超過 maxArrayLength配置節配置數。3.返回字節數超過maxBytesPerRead配置節配置數。4.返回字符串長度超過maxStringContentLength配置節配置數。5.獲取表名稱的字符數超過maxNameTableCharCount配置節配置數。
6.可序列化的項數超過maxItemsInObjectGraph配置節配置數。例如你要返回或接受一個有10個T,T包含有5個屬性(基本類型)組成的List<T>或是一個有10行5列DataTable組成的DataSet,它們分別有50項。如果沒有加大maxItemsInObjectGraph配置節的配置數很容易在返回較大列表時出現這個錯誤,當然應當使用分頁或分批返回列表盡量避免傳遞過大列表
解決方法:根據實際情況設定相應的配置節,或是采用續傳,分頁等合理的手段避免超限