2

当我尝试使用 WP7 将内容发送到 Web 服务时收到此错误。

格式化程序在尝试反序列化消息时引发异常:反序列化操作“ SubmitMobileData”的请求消息正文时出错。读取 XML 数据时已超出最大字符串内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用MaxStringContentLength的对象的属性来增加此配额。XmlDictionaryReaderQuotas第 178 行,第 21 位。

我认为它不是我的网络服务。它实际上是我的 WP7 试图序列化 XML 中的数据。那么我的问题是如何设置XmlDictionaryReaderQuotas. MaxStringContentLength我的 WP7 应用程序中的属性。我知道如何在桌面应用程序的客户端和 Web 服务内部进行设置。但我不能在 WP7 应用程序的 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>

4

2 回答 2

3

在以下情况下抛出指定的异常:

  1. 托管 Web 服务的应用程序未指定maxStringContentLength读取器配额(因此使用了默认的)或配额设置得太低;
  2. 调用的 Web 方法的至少一个字符串参数的长度违反了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;
    }
}
于 2011-03-01T18:32:24.313 回答
0

所以基本上你想要做的是改变你的 WP7 应用程序连接的特性对吗?在调用远程方法之前,您首先必须创建soapclient 对象的实例,然后调用它的OpenAsync()方法。当您初始化此soapclient 时,您可以提供一个System.ServiceModel.Channels.Binding(). 如果您以编程方式创建此绑定并在该集合中设置适当的maxStringContentLength怎么办?

于 2011-03-02T12:29:35.757 回答