0

我的 ASP.NET 服务器正在提供一组由我的 WPF 客户端使用的 WCF 服务。一切正常,直到字符串字段的长度超过 8K。现在这会在 ASP.NET 服务器上生成以下异常...

反序列化 Project.ModelType 类型的对象时出错。读取 XML 数据时已超出最大字符串内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性来增加此配额。

我已在 WPF app.config 上将MaxStringContentLength的值增加到 64K,但这并没有解决问题。所以我想我也需要在 ASP.NET 端增加这个值。但是我在 web.config 中没有任何值可以更改!这是我的 web.config 来显示这个......

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
      <forms name=".ASPXFTOAUTH"
             timeout="10"
             slidingExpiration="true"
             cookieless="UseCookies"/>
    </authentication>

    <membership>
      <providers>
        <clear/>
      </providers>
    </membership>

    <customErrors defaultRedirect="~/Error.htm" mode="RemoteOnly">
      <error statusCode="404" redirect="~/404.aspx" />
    </customErrors>
  </system.web>

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

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                               multipleSiteBindingsEnabled="true" />
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

那么如何更新服务器以指示更高的MaxStringContentLength值?我的服务的 app.config 看起来像这样......

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IAccess" closeTimeout="00:01:00"
               openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
               allowCookies="false" bypassProxyOnLocal="false"
               hostNameComparisonMode="StrongWildcard"
               maxBufferSize="131072" maxBufferPoolSize="524288" maxReceivedMessageSize="131072"
               messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
               useDefaultWebProxy="true">
        <readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384"
                      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
          <message clientCredentialType="UserName" algorithmSuite="Default" />
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>

  <client>
    <endpoint binding="basicHttpBinding"
              bindingConfiguration="BasicHttpBinding_IAccess" 
              contract="AccessService.IAccess"
              name="BasicHttpBinding_IAccess" />
  </client>
</system.serviceModel>

有任何想法吗?

更新:

我的服务是通过有一个类“Access.svc”来定义的

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Access : IAccess
{
    // ...IAccess method implementations
}

...具有以下标记...

<%@ ServiceHost Language="C#" Debug="true" 
                Service="Ecotech.AMS.WebServer.Access" 
                CodeBehind="Access.svc.cs" %>

...如评论中所述,web.config 中的服务没有任何具体内容。

4

2 回答 2

0

尝试通过项目的右键菜单单击“添加服务引用”。这样做会将必要的配置信息添加到您的 web.config 文件中。

完成此操作后,您可以maxReceivedMessageSize在绑定上设置属性。这样做将最准确地反映您在 WCF 服务方面所做的事情。

于 2013-02-12T01:38:24.670 回答
0

您需要处理的地方是web config,您需要添加可以设置数据大小的服务行为。比如像这样,

<behaviors>
      <serviceBehaviors>
        <behavior name="SilverlightWCFLargeDataApplication">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>

      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="SilverlightWCFLargeDataApplication">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

如果这不起作用,请在此处发布您的网络配置。希望对您有所帮助。

于 2013-02-12T03:58:58.187 回答