2016-04-26 11 views
2

Ich möchte 100 MB Daten von einer Clientanwendung zu einem WCF-Dienst übertragen. Ich habe readerQuotas in meinem web.config eingestellt, aber ich las einen Artikel, wo sie Anforderungsgrenzen vorschlug, die in http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits kurz erklärt wird, die exakte Eigenschaft ist maxAllowedContentLength.ReaderQuotas vs Anforderungslimit in WCF web.config

Ich würde gerne wissen, was die Unterschiede sind, bitte.

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> 

Request

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

Antwort

4

Request ist eine Web-Server-Ebene-Einstellung. Wenn eine Anfrage mit ContentLength (oder URL-Länge) kommt, die das dort festgelegte Limit überschreitet, wird die Anfrage sofort mit dem 404-Fehler zurückgewiesen, und es wird nicht einmal in die WCF-Pipeline gelangen. Diese Konfigurationseinstellung bezieht sich also überhaupt nicht auf WCF. Beachten Sie, dass die Gesamtlänge der Anfrage begrenzt wird, unabhängig davon, was in der Anfrage enthalten ist.

readerQuotas ist WCF-Einstellung. Es gibt verschiedene Einschränkungen für die Größe von SOAP-Nachrichten, die vom WCF-Endpunkt verarbeitet werden können. Beachten Sie, dass es jetzt um SOAP-Nachricht (also XML) geht und nicht um die Gesamtlänge der Anfrage. Diese Einstellungen sind im Grunde erforderlich, um verschiedene Arten von Denial-of-Service-Angriffen auf Ihren Dienst zu verhindern, indem Sie XML-Nachrichten verwenden, die auf eine spezielle Art und Weise vorbereitet wurden.

maxArrayLength - maximale Größe des Arrays xml reader kann beim Lesen der Nachricht zurückkehren. Dies beinhaltet Byte-Arrays. WCF wird aufhören, Nachrichten zu lesen und Anfragen abzulehnen, wenn ein Array gelesen wird, das größer ist als das. Wenn Sie Dateien an Ihre WCF-Anforderungen anhängen, indem Sie Eigenschaften wie byte[] für Ihre Datenkontaktklasse verwenden, ist dies die Einstellung, die die Größe einer solchen Datei einschränkt (aber besser keine Dateien auf diese Weise anhängen).

maxDepth - maximale Verschachtelung von XML-Elementen in der Nachricht.

maxNameTableCharCount - Leser einige Informationen speichern (wie Namespaces und Namespacepräfixe) im Speicher, während die Nachricht zu lesen. Dies begrenzt die Größe einer solchen In-Memory-Tabelle.

maxStringContentLength - maximale Länge einer Zeichenfolge innerhalb der SOAP-Nachricht. Angenommen, Sie haben eine DataContract-Klasse mit einer String DataMember-Eigenschaft. Wenn während des Deserialisierens diese Zeichenfolge den Grenzwert überschreitet, wird die Nachricht zurückgewiesen.

maxBytesPerRead - grundsätzlich maximale Länge eines beliebigen xml-Elements (einschließlich aller untergeordneten Elemente).

+0

Sie haben vielleicht die Einstellungen für das Framework http vergessen. http://stackoverflow.com/a/6472631/1498669 – Bernhard

Verwandte Themen