Senden Objekt WCF-Dienst. MaxStringContentLength (8192 bytes) überschritten, wenn die Deserialisieren
Habe ich eine einfache WCF-web service, der eine Methode: SubmitTicket(Flug ft, string username, string password)
Auf der client-Seite, ich habe eine Anwendung für das ausfüllen eines Formulars (ein Flug-ticket) und senden diese neu erstellten web service. Wenn dieses Flug-Objekt überschreitet 8192bytes bekomme ich die folgende Fehlermeldung:
"Es wurde ein Fehler beim Deserialisieren des Objekts vom Typ Flug. Die maximale string-Länge des Inhalts Quote (8192) wurde überschritten beim Lesen von XML-Daten. Diese Quote kann erhöht werden, durch ändern der MaxStringContentLength Eigenschaft auf die XmlDictionaryReaderQuotas Objekt beim erstellen des XML-Lesers"
Habe ich einige der Forschung online und fand, dass ich habe die MaxStringContentLength im web.config (server) und app.config (client) auf eine höhere Nummer. Problem ist, ich habe versucht, jede mögliche Kombination von Einstellungen in den beiden config-Dateien aus dem Lesen der verschiedenen blogs und Websites, aber es immer NOCH nicht auf, dass die gleichen Fehler!
Ich angehängt habe meinen client-und server-config-code (so wie es im moment ist, hat es schon viele, viele, viele Veränderungen im Laufe des Tages ohne Erfolg).
Eine Sache, die ich bemerkt ist, dass die Konfiguration.svcinfo Datei auf meinem client-Anwendung scheint immer zeigt 8192 für MaxStringContentLength, wenn ich ein update der service Referenz. Es erscheint die Standard-Werte, auch wenn ich explizit den verbindlichen Eigenschaften. Nicht ob das bezogen auf mein problem, aber erwähnenswert.
Hier ist das anwendbare app.config/web.config-code für die Definition der Endpunkt Bindungen:
<<<<< KUNDE >>>>>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IFlightTicketWebService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
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 address="http://xx.xx.xx/xxxxxxxx.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFlightTicketWebService"
contract="FlightTicketWebService.IFlightTicketWebService"
name="BasicHttpBinding_IFlightTicketWebService" />
</client>
</system.serviceModel>
</configuration>
<<<<< SERVER >>>>>
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="GSH.FlightTicketWebService.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web>
<httpRuntime maxRequestLength="16384"/>
<compilation debug="true" targetFramework="4.0"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IFlightTicketWebService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
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>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
<services>
<service name="FlightTicketWebService">
<endpoint
name="FlightTicketWebServiceBinding"
address="http://xx.xx.xx/xxxxxxxxxxx.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IFlightTicketWebService"
contract="IFlightTicketWebService"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
InformationsquelleAutor deadcom | 2011-08-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist, dass Ihr Dienst ist nicht Kommissionierung bis seine config denn Sie haben den service-Namen werden FlightTicketWebService in der Erwägung, dass, würde ich vermuten, dass der tatsächliche Typ in einem namespace. Voll qualifizieren, die service-Namen mit der namespace und es abholen sollte deine config
Das ist im wesentlichen ein Nebenprodukt der WCF 4 Standard-Endpunkt-Funktionalität, wenn es feststellt, dass keine passende config bringt es Endpunkte mit der Standard config
Ich habe noch die service-Namen, angegeben als FlightTicketWebService, die arbeiten, obwohl Sie nicht den vollständig qualifizierten Namen.
Nun, es beträgt dieselbe dasselbe wie das, was Sie getan haben, ändern Sie die Standard-binding-Konfiguration (das ist, was mit no-name ist). Ihre service-element und der Endpunkt, den Sie angegeben haben, werden ignoriert. Der Standard für http-basierte Basis-Adresse ist die Verwendung von BasicHttpBinding das ist, warum Sie werden sehen, Ihr Verhalten
Ich habe gekämpft, diesen Fehler jetzt schon 3 Wochen (ab und an)... was für eine Erleichterung. Obwohl, ich denke, das WCF Sachen gemacht werden könnte ein wenig leichter, oder haben eine bessere Dokumentation!
Vielen Dank für Ihre Hilfe. Obwohl, ich hatte auf jeden Fall die angegebene Leistung mit einer voll-qualifizierten Namen in der viele Iterationen der config generiert ich beim Versuch, dieses Problem zu lösen. Seltsam, dass es nie zu funktionieren schien für mich.
InformationsquelleAutor Richard Blewett
Dies ist die Antwort! Ich habe überall gesucht, die Lösung für dieses problem in WCF 4.0, und dieser Eintrag von Richard Blewett war das Letzte Stück des Puzzles.
Wichtige Dinge gelernt, aus meiner Forschung:
Server-Web.config-Datei; keine sorgen über den client
InformationsquelleAutor Alex Fairchild