C# WP7:序列化WebService调用中的字符串时出错

C# WP7:序列化WebService调用中的字符串时出错,c#,windows-phone-7,maxstringcontentlength,C#,Windows Phone 7,Maxstringcontentlength,当我试图用WP7将内容发送到Web服务时,我收到了这个错误 格式化程序在尝试反序列化消息时引发异常:反序列化操作“SubmitMobileData”的请求消息体时出错。读取XML数据时已超过最大字符串内容长度配额(8192)。可以通过更改创建XML读取器时使用的XmlDictionaryReaderQuotas对象上的MaxStringContentLength属性来增加此配额。第178行,位置21 我想这不是我的网络服务。实际上,我的WP7试图序列化XML中的数据。我的问题是如何在我的WP7应

当我试图用WP7将内容发送到Web服务时,我收到了这个错误

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

我想这不是我的网络服务。实际上,我的WP7试图序列化XML中的数据。我的问题是如何在我的WP7应用程序中设置
XmlDictionaryReaderQuotas
MaxStringContentLength
属性。我知道如何在桌面应用程序的客户端和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>


在以下情况下引发指定的异常:

  • 承载web服务的应用程序未指定
    maxStringContentLength
    读卡器配额(因此使用默认配额),或者配额设置得太低
  • 调用的web方法的至少一个字符串参数的长度违反了
    maxStringContentLength
    reader配额
  • 如异常状态所示,在对操作“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>
    

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

    是的,是否有什么不合理的地方?您的
    ServiceReferences.ClientConfig
    看起来像什么?把它贴在这里。您是否尝试过使用它?通过decyclones Comments发布编辑web服务的配置,以增加服务接收的SOAP消息中每个元素的最大内容长度。请参阅下面的帖子。遗憾的是,经过您的努力,客户端WP7无法识别客户端字符串。我想这是因为Wp7太新了,他们还没有实现……这是我在添加那行时遇到的一个错误:无法识别的元素“readerQuotas”。我正在考虑通过
    client.Endpoint.Binding
    创建或简单地访问BasicHttpBinding。不幸的是,在Wp7中,Binding类似乎缺少.Elements集合。
    client.Endpoint.Binding.CreateBindingElements()
    在您的案例中返回什么?你能通过这些元素更新属性吗?
    static XmlDictionaryReaderQuotas()
    {
        maxQuota = new XmlDictionaryReaderQuotas(0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff);
    }
    
    public static XmlDictionaryReaderQuotas Max
    {
        get
        {
            return maxQuota;
        }
    }