0

我收到以下错误:

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

为了增加 MaxStringContentLength 的大小,我修改了我的 Web.config,如下所示。

<?xml version="1.0"?>
<configuration>

<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="webHttpBindingDev">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"  maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

即使那样我也遇到了同样的错误:(

请告诉我需要对我进行哪些更改才能解决此问题。提前致谢 !!

4

1 回答 1

4

You're Web.config 文件表明您使用的是 .NET 4.0,并且 Web.config 中没有明确定义端点,因此 WCF 为您提供默认端点(基于 *.svc 文件的位置) ,并使用该方案的默认basicHttpBinding绑定http。默认maxStringContentLength值为 8192。

要改变这一点,您需要:

  1. 显式添加端点并将您定义的绑定(使用绑定配置的 `name` 属性)分配给端点的 `bindingConfiguration` 属性,或
  2. 通过删除 `name` 属性,使您在配置文件中定义的绑定配置成为该类型绑定的默认配置,并将 `http` 的默认映射从 `basicHttpBinding` 更改为 `webHttpBinding`。

要通过显式端点执行此操作,请将以下内容添加到您的 Web.config 文件中<system.serviceModel>

<services>
  <service name="your service name">
    <endpoint address="" binding="webHttpBinding" 
              bindingConfiguration="webHttpBindingDev" 
              contract="your fully-qualified contract name" />
  </service>
</services>

您必须为您的服务名称和合同提供正确的值。

要通过设置默认值来做到这一点,您需要webHttpBinding通过删除name属性将指定的绑定配置标记为默认值:

<bindings>
  <webHttpBinding>
    <binding>
      <readerQuotas maxDepth="2147483647" 
                    maxStringContentLength="2147483647"  
                    maxArrayLength="2147483647" 
                    maxBytesPerRead="2147483647" 
                    maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>

接下来,您需要设置webHttpBinding为该http方案的默认绑定:

<protocolMapping>
  <add binding="webHttpBinding" scheme="http" />
</protocolMapping>

通过这两项更改,您无需添加显式端点。

另外,由于您使用的是webHttpBinding,我相信您需要将以下内容添加到端点行为中:

<behaviors>
  <endpointBehaviors>
    <behavior>
      <webHttp />
    </behavior>
  </endpointBehaviors>
</behaviors>

查看A Developer's Introduction to Windows Communication Foundation 4,了解有关 WCF 4 中默认端点、绑定等的更多信息。

于 2013-09-17T21:38:49.527 回答