webentwicklung-frage-antwort-db.com.de

"Das maximale Kontingent für die Länge von Zeichenfolgeninhalten (8192) wurde beim Lesen von XML-Daten überschritten" Fehler beim Senden von XML-Zeichenfolgen an WCF

Ich arbeite mit einer .NET, C # -Anwendung, die beabsichtigt, eine lange XML-Zeichenfolge zur weiteren Operation an eine WCF-Dienstmethode zu senden. Wenn meine Anwendung versucht, die XML-Zeichenfolge zur Laufzeit an den WCF-Dienst zu senden, wird folgende Fehlermeldung angezeigt:

"The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:strProdUserDataXML. The InnerException message was 'There was an error deserializing the object of type System.String. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 131, position 57.'. Please see InnerException for more details."

Auf meiner Anwendungsseite web.config habe ich den "Binding" & "Endpoint" wie folgt geschrieben:

<binding name="EndPointHTTPGenericPortal" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    <security mode="None">
    <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
    </binding>

    <endpoint address="http://192.168.140.40/WcfGenericPortal_Service/Service1.svc" binding="basicHttpBinding" bindingConfiguration="EndPointHTTPGenericPortal" contract="IService1" name="EndPointHTTPGenericPortal" behaviorConfiguration="Graph" />

Wenn mir jemand helfen kann, diesen Fehler zu beheben, bin ich sehr dankbar. Vielen Dank an alle im Voraus.

17
Pinaki Karuri

Hier ist ein Artikel auf MSDN über Reader Quotas .

Es scheint, dass eines der Leserkontingente auf Ihrer Serverseite überschritten wird. 

Insbesondere wird maxStringContentLength überschritten. Der Standardwert ist 8192 Zeichen für maxStringContentLength, was wie in der Fehlermeldung beschrieben überschritten wird.

Es ist jedoch möglicherweise nicht die beste Methode, alle Werte auf das Maximum 2147483647 zu erhöhen, wie einige andere vorgeschlagen haben.

Wie in der MSDN-Dokumentation beschrieben, die ich verlinkt habe:

Die Komplexitätsbedingungen bieten Schutz vor Dienstverweigerung (DOS) Angriffe, die versuchen, die Nachrichtenkomplexität zu nutzen, um Endpunktverarbeitungsressourcen. Andere Komplexitätseinschränkungen umfassen Elemente wie eine maximale Elementtiefe und eine maximale Länge für Zeichenfolge Inhalt innerhalb der Nachricht.

In Verbindung mit der Tatsache, dass Sie derzeit Security Mode auf None gesetzt haben, können Sie sich auf einige Probleme einstellen.

10
Derek W

Ich habe diesen Fehler erhalten und habe das Problem gelöst - MaxItemsInObjectGraph-Eigenschaft für den Dienst sowohl in der Client- als auch in der Serverkonfiguration.

<dataContractSerializer maxItemsInObjectGraph="2147483647" />

serverseite

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="Service.Service1Behavior">
        <dataContractSerializer maxItemsInObjectGraph="2147483647" />
      </behavior>
</system.serviceModel>

Client-Seite

<behaviors >
  <endpointBehaviors>
    <behavior name="endpointbehaviour">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

und vergessen Sie nicht, dieses Verhalten auf EndPoint behaviourConfiguration = "endpointbehaviour" anzuwenden

8
Lingaraj

Clientseitige Bindung

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

<behaviors>
<endpointBehaviors>
<behavior name="KAMServiceDistributor">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://localhost:1234/xxxx/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService11"
contract="yourservice namespae" name="AnyName" />
</client>
</system.serviceModel>

Service Config-Datei:

<system.serviceModel>
<behaviors>


<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceMetadata httpGetEnabled="true" />
<dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding <b>maxReceivedMessageSize="2147483647"</b>>
<readerQuotas maxDepth="128" maxStringContentLength="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="Service">
<endpoint binding="basicHttpBinding" contract="IService" />
</service>
</services>
</system.serviceModel>
6

Pinaki Karuri,

die Länge der Kontingente hängt nicht nur von der Konfiguration des Clients ab, sondern auch von der des Servers. Bitte posten Sie die web.config Ihres WCF-Servers, um das Problem zu klären. Es besteht eine Wahrscheinlichkeit, dass Sie bereits die Quote für 8192 festgelegt haben. Der schnellste Weg für Sie wäre, den Wert zu ermitteln und zu erhöhen.

Update

Soweit ich sehen kann, fehlt Ihnen der 'readerQuotas'-Knoten in der web.config Ihres Servers, sodass der Wert für MaxStringContentLength auf default (8192) gesetzt ist. Unter diesem Link finden Sie weitere Informationen: http://msdn.Microsoft.com/de-de/library/system.xml.xmldictionaryreaderquotas.maxstringcontentlength.aspx

5
Piotr Justyna

Versuchen Sie, folgende Punkte in Bindungen festzulegen.

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

Es hat mein Problem gelöst. Weitere Informationen finden Sie unter folgendem Link http://blogfornet.com/2013/08/the-maximum-string-content-length-quota-8192-hat-been-exceeded-while-reading-xml-data/

4

Vergewissern Sie sich, dass Ihr Target Framework für den Client mit dem des Services identisch ist. Ich hatte dieses Problem und versuchte alle oben genannten Korrekturen, aber das hat nicht funktioniert. Eigenschaften geprüft und Target Framework überprüft und geändert.

0
Luigi