WCF異?,F(xiàn)象兩種特殊情況具體分析
在WCF的實(shí)際操作中,通常都會(huì)遇到一些異常的發(fā)生,那么如何才能正確的解決這些異常呢?首先就需要我們通過(guò)不斷的實(shí)踐來(lái)積累經(jīng)驗(yàn),并對(duì)這些異常有一個(gè)深刻的了解。下面就為大家介紹兩種特殊的WCF異?,F(xiàn)象。#t#
WCF的代碼實(shí)例網(wǎng)上到處都是,但是在實(shí)際的使用過(guò)程中總會(huì)出現(xiàn)很多問(wèn)題,我就我在項(xiàng)目中使用WCF碰到的問(wèn)題做個(gè)總結(jié):
(注:要看到服務(wù)端真正異常配置includeExceptionDetailInFaults="true")
一。WCF異?,F(xiàn)象:界面假死不拋出任何異常(按常理超過(guò)等待時(shí)間應(yīng)該拋出超時(shí)異常但是沒(méi)有拋出不知道是什么原因)或拋出超時(shí)異常。
代碼環(huán)境:WinForm+netTcpBinding。
原因分析:因?yàn)閚etTcpBinding和wsHttpBinding都是有狀態(tài)連接所以造成這種現(xiàn)象可能是沒(méi)有及時(shí)釋放資源或當(dāng)前會(huì)話(huà)數(shù)超過(guò)maxConcurrentSessions配置節(jié)配置數(shù)。basicHttpBinding是無(wú)狀態(tài)連接所以不存在此問(wèn)題
解決方法:及時(shí)釋放資源,增大maxConcurrentSessions配置數(shù)
二。WCF異?,F(xiàn)象:超時(shí)異常。
代碼環(huán)境:WinForm+netTcpBinding
原因分析:造成這個(gè)現(xiàn)象會(huì)有很多原因
1.接受信息長(zhǎng)度超過(guò)maxReceivedMessageSize配置節(jié)配置數(shù)。
2.返回?cái)?shù)組長(zhǎng)度超過(guò) maxArrayLength配置節(jié)配置數(shù)。
3.返回字節(jié)數(shù)超過(guò)maxBytesPerRead配置節(jié)配置數(shù)。
4.返回字符串長(zhǎng)度超過(guò)maxStringContentLength配置節(jié)配置數(shù)。
5.獲取表名稱(chēng)的字符數(shù)超過(guò)maxNameTableCharCount配置節(jié)配置數(shù)。
6.可序列化的項(xiàng)數(shù)超過(guò)maxItemsInObjectGraph配置節(jié)配置數(shù)。例如你要返回或接受一個(gè)有10個(gè)T,T包含有5個(gè)屬性(基本類(lèi)型)組成的List<T>或是一個(gè)有10行5列DataTable組成的DataSet,它們分別有50項(xiàng)。如果沒(méi)有加大maxItemsInObjectGraph配置節(jié)的配置數(shù)很容易在返回較大列表時(shí)出現(xiàn)這個(gè)錯(cuò)誤,當(dāng)然應(yīng)當(dāng)使用分頁(yè)或分批返回列表盡量避免傳遞過(guò)大列表
WCF異常現(xiàn)象解決方法:根據(jù)實(shí)際情況設(shè)定相應(yīng)的配置節(jié),或是采用續(xù)傳,分頁(yè)等合理的手段避免超限