当我尝试使用WP7将内容发送到Web服务时,我收到此错误。
格式化程序在尝试反序列化消息时抛出异常:反序列化操作“
SubmitMobileData
”的请求消息正文时出错。读取XML数据时已超出最大字符串内容长度配额(8192)。通过更改创建XML阅读器时使用的MaxStringContentLength
对象上的XmlDictionaryReaderQuotas
属性,可以增加此配额。第178行,第21位。
我认为它不是我的网络服务。它实际上是我的WP7试图序列化XML内的数据。我的问题是如何在我的WP7应用程序中设置XmlDictionaryReaderQuotas
。MaxStringContentLength
属性。我知道如何在桌面应用程序的客户端和Web服务中设置它。但我无法将其设置在WP7 App的App.XAML文件中。
编辑:我在下面发布了client.config。我决定保留服务地址,以便那些想要了解连接服务的人。当希望回答这个问题时,我将删除wcf连接。
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMobileUtilities" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
contract="PimpMobileService.IMobileUtilities" name="BasicHttpBinding_IMobileUtilities" />
</client>
</system.serviceModel>
答案 0 :(得分:3)
在以下情况下抛出指定的异常:
maxStringContentLength
读者配额(因此使用默认值)或配额设置得太低; maxStringContentLength
读者配额。如异常所述,当反序列化操作“ SubmitMobileData ”的请求消息正文时发生错误。
通常,序列化发生在客户端,而反序列化发生在服务端。因此,必须添加(或更新)Web服务使用的绑定的读者配额,以包含具有足够大的值的maxStringContentLength
属性,以使每个SubmitMobileData
调用成功。
修改强>:
更改服务配置的配置以增加XML元素内容长度限制。不要将其复制到您的配置上,只需将其合并到:
<system.serviceModel>
<services>
<service name="Server.MobileUtilities">
<endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
contract="ServiceReferences.IMobileUtilities" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMobileUtilities">
<!-- Content of each XML element can be up to 10 million characters. -->
<readerQuotas maxStringContentLength="10000000" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
修改强>: 毕竟我认为这个问题与服务有关。
如果问题发生在客户端,则会抛出以下异常而不是您获得的异常:
读取XML数据时已超出最大字符串内容长度配额(8192)。通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象的MaxStringContentLength属性,可以增加此配额。
由于Silverlight程序集是WP7程序集的子集,因此客户端的阅读器配额始终设置为最大值。
这是XmlDictionaryReaderQuotas类定义的一部分:
static XmlDictionaryReaderQuotas()
{
maxQuota = new XmlDictionaryReaderQuotas(0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff);
}
public static XmlDictionaryReaderQuotas Max
{
get
{
return maxQuota;
}
}
答案 1 :(得分:0)
基本上你想要做的是改变你的WP7应用程序连接的特性吧?
在调用远程方法之前,您必须先创建soapclient对象的实例,然后调用它的OpenAsync()
方法。当您对该soapclient进行初始化时,您可以提供System.ServiceModel.Channels.Binding()
。如果您以编程方式创建此绑定并在其中设置相应的maxStringContentLength
?