今天在调用WCF服务的时候出现了这个异常提示, “System.Xml.XmlException: 根级别上的数据无效。 第 1 行,位置 1。”。具体的现象是在数据库表的某列,类型为nvarchar(max),现在需要从表中读出数据和写入数据。
但是一提交数据就抛异常,从异常信息上看和XML有关,但是调用方和服务提供方都没有用到XML的地方,后来发现数据量小的时候就可以提交,说明和服务代码无关,应该是数据量配置有问题。后来又发现,获取时没有问题,只是在提交时出错。那么应该是服务器端的配置出错。
原始配置如下:
<system.serviceModel>
<services>
<service name="EgoalTech.Remittance.ManagerService.RemittanceBasicDataService">
<endpoint address="" binding="customBinding" bindingConfiguration="SslCustomBinding"
contract="EgoalTech.Remittance.ManagerService.IRemittanceBasicDataService" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
</service>
</service>
</services>
<bindings>
<customBinding>
<binding name="SslCustomBinding">
<binaryMessageEncoding maxWritePoolSize="2147483647" maxReadPoolSize="2147483647" maxSessionSize="2147483647"/>
<httpTransport maxReceivedMessageSize="2147483647" />
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
已经将所有的Size都设为的2g,感觉应该能够接受大数据量了,可惜出错了。应该是某项配置依然使用了默认值,经过多次测试,最后终于发现是对
binaryMessageEncoding 的配置有遗漏,应该如下所示:
<bindings>
<customBinding>
<binding name="SslCustomBinding" >
<binaryMessageEncoding>
<readerQuotas maxStringContentLength="2147483647"/>
</binaryMessageEncoding>
<httpTransport maxReceivedMessageSize="2147483647"/>
</binding>
</customBinding>
</bindings>