wcf教程-传递数据过大怎么配置?读取 XML 数据时,超出最大字符串内容长度配额 (8192)
昨天測(cè)試客戶(hù)端程序與服務(wù)端wcf時(shí),出現(xiàn)一個(gè)錯(cuò)誤:
讀取 XML 數(shù)據(jù)時(shí),超出最大字符串內(nèi)容長(zhǎng)度配額 (8192)。通過(guò)更改在創(chuàng)建 XML 讀取器時(shí)所使用的 XmlDictionaryReaderQuotas 對(duì)象的 MaxStringContentLength 屬性,可增加此配額。
在wcf中其實(shí)已經(jīng)配置了傳遞數(shù)據(jù)的大小了:maxReceivedMessageSize?獲取或設(shè)置配置了此綁定的通道上可以接收的消息的最大大小。
basicHttpBinding等預(yù)定義的綁定一般具有MaxReceivedMessageSize屬性,CustomBinding則需要在Transport中定義。
<binding name="TcpBindingConfig" maxBufferPoolSize="655360000000" maxBufferSize="655360000" maxReceivedMessageSize="655360000000" transferMode="Streamed">還報(bào)上面的錯(cuò)誤,是因?yàn)閭鬏數(shù)臄?shù)據(jù)是字符串的問(wèn)題。
從網(wǎng)上找了一下,發(fā)現(xiàn)都是動(dòng)態(tài)配置的。整理一下:
1、在web.config中配置:
在bingding中增加一項(xiàng):
<bindings><netTcpBinding><binding name="TcpBindingConfig" maxBufferPoolSize="655360000000" maxBufferSize="655360000" maxReceivedMessageSize="655360000000" transferMode="Streamed"><readerQuotas maxDepth="32" maxStringContentLength="655360000"maxArrayLength="655360000"maxBytesPerRead="655360000" maxNameTableCharCount="655360000" /><security mode="None" /></binding></netTcpBinding><basicHttpBinding><binding name="BasicHttpBindingConfig" maxBufferPoolSize="655360000000" maxBufferSize="655360000" maxReceivedMessageSize="655360000000" sendTimeout="00:02:00" transferMode="Streamed"><readerQuotas maxDepth="32" maxStringContentLength="655360000"maxArrayLength="655360000"maxBytesPerRead="655360000" maxNameTableCharCount="655360000" /><security mode="None"/></binding></basicHttpBinding></bindings>ReaderQuotas:獲取或設(shè)置可由配置了此綁定的終結(jié)點(diǎn)處理的 SOAP 消息的復(fù)雜性約束。
該屬性是XmlDictionaryReaderQuotasElement類(lèi)型,一般需要設(shè)置該屬性的MaxArrayLength、MaxStringContentLength及MaxDepth屬性。
MaxItemsInObjectGraph:獲取對(duì)象圖中要序列化或反序列化的最大項(xiàng)數(shù)。
該屬性屬于DataContractSerializer類(lèi),需要在serviceBehaviors下的behavior節(jié)中配置。
2、在 后臺(tái) C#修改:ServiceClient service = new ServiceClient(); (service.Endpoint.Binding as NetTcpBinding).MaxReceivedMessageSize = int.MaxValue; (service.Endpoint.Binding as NetTcpBinding).MaxBufferPoolSize = int.MaxValue; (service.Endpoint.Binding as NetTcpBinding).MaxBufferSize = int.MaxValue; 發(fā)送大數(shù)據(jù):在WCF服務(wù)端解決NetTcpBinding binding = new NetTcpBinding();binding.MaxReceivedMessageSize= 2147483647(更改這個(gè)數(shù)字) ; 接受大數(shù)據(jù):在WCF客戶(hù)端解決NetTcpBinding binding = new NetTcpBinding();binding.ReaderQuotas = new XmlDictionaryReaderQuotas() { MaxStringContentLength = 2147483647(更改這個(gè)數(shù)字) };
總結(jié)
以上是生活随笔為你收集整理的wcf教程-传递数据过大怎么配置?读取 XML 数据时,超出最大字符串内容长度配额 (8192)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python圣诞树代码成品图片动态_基于
- 下一篇: 前端vue方法导出为xsml