readerQuotas vs WCF web.config中的请求限制

时间:2016-04-26 16:40:05

标签: c# asp.net wcf iis request

我希望将100 MB的数据从客户端应用程序传输到WCF服务。我在web.config中设置了 readerQuotas ,但我读了一篇文章,其中建议请求限制,在http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits中简要说明了确切的属性是maxAllowedContentLength。

我想知道有什么不同。

readerQuotas

<system.serviceModel>

  <bindings>
    <basicHttpBinding>

      <binding name="PowerTransmissionBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00"
      maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="StreamedRequest" messageEncoding="Mtom">

        <readerQuotas maxDepth="32" maxBytesPerRead="200000000"
        maxArrayLength="200000000" maxStringContentLength="200000000" />

        </binding>
      </basicHttpBinding>
  </bindings>
</system.serviceModel>

requestLimits

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2000000000" />
  </requestFiltering>
</security>

1 个答案:

答案 0 :(得分:6)

requestLimits 是Web服务器级别设置。当ContentLength(或url length)的请求超出你在那里设置的限制时 - 请求立即被拒绝,404错误,它甚至进入WCF管道。因此,此配置设置根本与WCF无关。请注意,它限制了请求的总长度,无论请求内部无关紧要。

readerQuotas 是WCF级别设置。它对可由WCF端点处理的SOAP消息的大小施加了各种限制。请注意,现在它是关于SOAP(so,xml)消息而不是关于请求的总长度。这些设置基本上需要使用以特殊方式准备的xml消息来防止针对您的服务的各种拒绝服务攻击。

maxArrayLength - 读取消息时,数组xml阅读器的最大大小可能会返回。这包括字节数组。如果WCF读取的数据大于此值,WCF将停止读取消息并拒绝请求。如果您使用数据联系人类的byte[]属性将文件附加到WCF请求 - 这个设置将限制此类文件的大小(但最好不要以这种方式附加文件)。

maxDepth - 消息中xml元素的最大嵌套。

maxNameTableCharCount - 读取器会在读取消息时将一些信息(例如命名空间和命名空间前缀)存储在内存中。这限制了这种内存表的大小。

maxStringContentLength - SOAP消息中字符串的最大长度。假设您有DataContract类,其中包含一些字符串DataMember属性。如果在反序列化期间发生此字符串超出限制 - 消息将被拒绝。

maxBytesPerRead - 基本上是任何xml元素的最大长度(包括所有xml元素)。