【问题标题】:Javascript to WCF - MaxStringContentLength ExceptionJavascript 到 WCF - MaxStringContentLength 异常
【发布时间】:2012-03-02 14:19:50
【问题描述】:

我正在使用 jQuery/JavaScript 客户端向 WCF REST 服务 (webHttpEndpoint) 发送 AJAX 请求,但出现以下异常...

System.Xml.XmlException:读取 XML 数据时已超出最大字符串内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性来增加此配额。

这是我的 system.serviceModel web.config 定义...

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                               multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="MembershipBinding">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
        <binding name="userHttps">
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CommonSvcBehavior">
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                                    membershipProviderName="AspNetSqlMembershipProvider" />
          </serviceCredentials>
          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
                                roleProviderName="MySqlRoleProvider" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="AuthenticationServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name=""
                          crossDomainScriptAccessEnabled="false"
                          helpEnabled="true"
                          automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

我已经尝试添加以下绑定.....但是没有生效...

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

你能帮忙吗?

【问题讨论】:

  • 十个问题,没有一个被接受?

标签: wcf


【解决方案1】:

我想通了.....在standardEndPoints中需要更改以下内容

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name=""
                      crossDomainScriptAccessEnabled="false"
                      helpEnabled="true"
                      automaticFormatSelectionEnabled="true">
      <readerQuotas maxDepth="2147483647"
                    maxStringContentLength="2147483647"
                    maxArrayLength="2147483647"
                    maxBytesPerRead="2147483647"
                    maxNameTableCharCount="2147483647" />       
    </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>

【讨论】:

    【解决方案2】:

    如果您想覆盖绑定的默认值,您需要将绑定名称分配给&lt;service&gt; 部分中&lt;endpoint&gt; 元素的bindingConfiguration 属性,如下所示:

    <services>
      <service name="MyService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MembershipBinding" contract="MyService.IMyContract" />
      </service>
    </services>
    

    &lt;services&gt; 部分位于 &lt;system.serviceModel&gt; 部分中。

    我不能 100% 确定这是否适用于 RESTful WCF,但从我所做的研究来看,它似乎应该如此。

    要记住的重要一点是,您必须告诉服务对给定端点使用什么绑定,如果您需要该绑定上的设置值而不是默认值,则需要分配您设置的绑定直到终点。

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多