2010-06-28 2 views
0

Je ne sais pas ... je ne sais pas exactement pourquoi cela se passe. J'ai parcouru au moins 50 pages dans Google et parcouru StackOverflow pour cette réponse. Lorsque j'exécute ce code, je reçois le message d'erreur:WCF - Win App "Le quota maximal de longueur de contenu de chaîne (8192) a été dépassé lors de la lecture de données XML."

"Une erreur s'est produite lors de la tentative de désérialisation du paramètre http://tempuri.org/:message Le message InnerException était" Une erreur s'est produite lors de la désérialisation de l'objet de type Application.Interfaces.Mail.MailMessage Le quota maximal de longueur de contenu de chaîne (8192) a été dépassé lors de la lecture de données XML.Ce quota peut être augmenté en changeant la propriété MaxStringContentLength de l'objet XmlDictionaryReaderQuotas utilisé lors de la création du lecteur XML. '"

Voici ce que j'ai sur le service WCF (serveur):

<system.serviceModel> 
    <services> 
    <service behaviorConfiguration="SimpleServiceBehavior" name="Application.Services.Mail.Mailer"> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://myapp.com/"/> 
     </baseAddresses> 
     </host> 
     <endpoint bindingConfiguration="BasicHttpBinding_IMailer" bindingName="BasicHttpBinding_IMailer" binding="basicHttpBinding" address="http://myapp.com/" contract="Application.Services.Local.Mail.IEmailer"> 
     <identity> 
      <dns value="myapp.com"/> 
     </identity> 
     </endpoint> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="SimpleServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="BasicHttpBinding_IMailer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="800000" maxBufferPoolSize="800000" maxReceivedMessageSize="800000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="800000" maxStringContentLength="800000" maxArrayLength="800000" maxBytesPerRead="800000" maxNameTableCharCount="800000" /> 
     <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
      <message clientCredentialType="UserName" algorithmSuite="Default"/> 
     </security> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
</system.serviceModel> 

Et ce que j'ai sur le côté client:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="BasicHttpBinding_IMailer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="5242880" maxBufferPoolSize="524288" maxReceivedMessageSize="5242880" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="32" 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> 
    <client> 
    <endpoint address="http://myapp.com/Mail/Mailer.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMailer" contract="Interfaces.Mail.IEmailer" name="BasicHttpBinding_IMailer"/> 
    </client> 
</system.serviceModel> 
+0

Avez-vous essayé de configurer la liaison dans le code (plutôt que dans le fichier app.config)? J'ai une configuration de travail pour NetTcpBinding, mais je vois que vous voulez utiliser BasicHttpBinding donc je préfère ne pas le coller ici. – Alan

+1

Non, je ne l'ai pas essayé en utilisant du code. Quelle différence cela fait-il si je le lie en code vs config? –

+0

Théoriquement, rien. Cependant, j'ai dû me battre pour faire fonctionner les choses avec net.tcp et il y avait un cas dans lequel j'ai dû recourir à une solution basée sur le code du côté client (voir http://geekswithblogs.net/RandyMichak/archive/ 2009/03/04/programattically-setting-the-maxitemsinobjectgraph-property-in-client.aspx) – Alan

Répondre

0

pas à 100% sûr que ce soit le problème - mais vous avez certainement quelque chose de louche avec vos adresses ....

Dans la configuration de votre serveur vous avez:

<baseAddresses> 
    <add baseAddress="http://myapp.com/"/> 
</baseAddresses> 

et

<endpoint bindingConfiguration="BasicHttpBinding_IMailer" 
      bindingName="BasicHttpBinding_IMailer" binding="basicHttpBinding" 
      address="http://myapp.com/" 
      contract="Application.Services.Local.Mail.IEmailer"> 

encore dans votre côté client confi g, vous utilisez

<client> 
    <endpoint address="http://myapp.com/Mail/Mailer.svc" ... /> 
</client> 

Alors, quelle est votre adresse, vraiment? Si vous hébergez votre service WCF dans IIS, je ne pense pas que vous ayez besoin de quoi que ce soit dans votre configuration côté serveur - ni un <baseAddresses> ni le address= sur le point de terminaison auront vraiment beaucoup à dire à quoi ressemble l'adresse de service - il sera déterminé par le nom de votre serveur et le nom du répertoire virtuel ainsi que le nom et l'extension de ce fichier * .svc.

Mais ces adresses trompeuses pourraient conduire à une mauvaise configuration, de sorte que votre vrai, point final réel ne reçoit aucun réglage personnalisé, mais utilisera les paramètres par défaut à la place ....

Essayez de nettoyer votre serveur config de côté - est-ce que cela aide du tout ??

+0

Ce qui est étrange, c'est que j'ai une application ASP.NET MVC en utilisant cette configuration client exacte et cela fonctionne. C'est seulement depuis que j'ai créé le WinApp-- qui a des problèmes. –

+0

Je ne l'ai pas encore nettoyé, et j'ai fini par emprunter un autre chemin en raison d'une date limite. Cependant, je suis sûr que cela ferait partie de la solution. –

Questions connexes