Another "Das maximale Zeichenfolgeninhaltslängenkontingent (8192) wurde beim Lesen von XML-Daten überschritten." Problem mit WCF und Silverlight 4

8

Ich habe keine Probleme, eine große Datenmenge abzurufen, aber wenn ich sie zurück an den Dienst sende, wird dieser Fehler angezeigt. Ich habe versucht, das Element zu den web.config und servicereference.clientconfig hinzuzufügen, und es wird nicht in beiden erkannt. An einer Stelle erhielt ich eine Nachricht über das Hinzufügen von ReaderQuotas zu bindingElementExtensions, aber ich kann nichts Nützliches finden, wie man das macht. Ich habe Posts gefunden, die sagen, dass ich die devenv.exe.config und so ändern musste, aber dabei habe ich VS. Ich habe versucht, dies für zwei Tage zu lösen, damit jede Hilfe geschätzt wird.

edit: Hier ist der Bindungsbereich von web.config:

%Vor%

und servicereference.clientconfig:

%Vor%

Beide wurden von VS generiert.

    
Jim Perry 05.10.2010, 19:20
quelle

4 Antworten

9

Sie verpassen einfach die Konfiguration für die maximale Länge des Zeichenfolgeninhalts .

Fügen Sie dies Ihren Bindungsattributen (Client und Server) hinzu

%Vor%

Leider habe ich nicht bemerkt, dass dieses untergeordnete Element unter der Codierung liegt, die verwendet wird, wenn eine benutzerdefinierte Bindung verwendet wird, in Ihrem Beispiel scheint es binaryMessageEncoding zu sein. Wenn nicht, versuchen Sie die anderen Kodierungen mit der Einstellung.

%Vor%     
Jab 05.10.2010 19:48
quelle
2

if Das maximale Kontingent für den Inhalt der Zeichenfolge (8192) wurde beim Lesen der XML-Daten überschritten. "ignoriert Ihre web.config-Einstellungen, SELBST nachdem Sie sie festgelegt haben       Sie können das Problem auch in Ihrem Code lösen, indem Sie eine Instanz von XmlDictionaryReaderQuotas erstellen und MaxStringContentLength auf 2147483647

setzen

Verwenden Sie dann einfach die Instanz von XmlDictionaryReaderQuotas, die hier als mycreatedreaderquota angezeigt wird %Vor%     

miles ercolani 14.09.2012 00:09
quelle
1

edit : Dies hat einen unvollständigen Entwurf gespeichert, sorry

  1. Das Synchronisieren der Service / Client-Definitionen ist das, was Sie getan haben, aber es ist unbedingt notwendig, dass sie übereinstimmen.
  2. Sind Sie sicher, dass Sie eine benutzerdefinierte Bindung benötigen? Haben Sie versucht, mit ws (Dual) HttpBinding als Basis?
  3. Dieser Beitrag könnte Sie interessieren: silverlight 3 wcf service configuration - - Erhalte maxreceivedmessagesize error , insbesondere die Einstellung Ссылка .
  4. Sie müssen möglicherweise maxBufferPoolSize und maxItemsInObjectGraph festlegen. Die Konfiguration in der verknüpften SO-Post hat ziemlich alles ausgereizt.
  5. Ich weiß nicht, ob Sie die ChannelFactory-Client-Proxy-Methode oder die Service-Referenz-Methode verwenden, aber Sie möchten vielleicht die frühere Route gehen. In Debug-Sitzungen habe ich festgestellt, dass bestimmte Werte aus der Konfiguration nicht angewendet wurden, wie ich gedacht hatte, aber mein Kurzzeitgedächtnis zu diesem Thema ist jetzt ziemlich verloren.
  6. Ähnlich wie # 5 können Sie WCF Test Client-Probleme feststellen, bei denen der Testclient Standardbindungen verwendet, auf die Sie nicht vorbereitet sind.
  7. Ein weiterer Beitrag, der von Interesse sein könnte: Ссылка

Streaming ist wahrscheinlich die beste Option auf der Client-Seite, um die Blockierung des gepufferten transferMode zu vermeiden. Ich weiß nicht genau, wie groß die Daten konsistent sein werden, aber Ihr Service wird sich auf der Client-Seite ein bisschen netter verhalten, wenn Sie diesen Weg gehen. Ein guter Grund für die Konfiguration nur der Client-Seite für das Streaming finden Sie hier: Ссылка .

Hoffentlich hilft eine Kombination der oben genannten

    
w0rd-driven 06.10.2010 13:20
quelle
0

Haben Sie versucht, die maxStringContentLength innerhalb der Config für den Service zu setzen? In meiner Situation erlaubte es dem Silverlight-Client, für den Dienst den gewünschten Wert für maxStringContentLength zu verwenden.

Eine Anmerkung ist, dass wenn Sie längere Strings zulassen, aber maxReceivedMessageSize nicht anpassen, dies ebenfalls Probleme verursachen kann. Das maxReceivedMessageSize muss sowohl auf dem Dienst als auch auf dem Client kontrolliert werden, da man die Werte nicht von einem anderen erbt.

    
Damien 28.03.2012 20:16
quelle

Tags und Links