8
votes

WCF - Win APP "Le quota de longueur maximale du contenu de la chaîne (8192) a été dépassé lors de la lecture de données XML."

J'ai un certain problème lors de la mise en œuvre du service Web via WCF. Alors que je suis une valeur de passage dans la méthode WCF de l'application client en tant que chaîne (XML), obtenez une erreur

Le formateur a jeté une exception en essayant de désérialiser le Message: Il y avait une erreur pendant essayer de désérialiser le paramètre http://tempuri.org/:xmlentity .

Le InnerException Le message était

'Il y avait une erreur désériorialisant le objet de type system.string. le Quota de longueur maximale de contenu de chaîne (8192) a été dépassé pendant la lecture Données XML. Ce quota peut être augmenté En modifiant la longueur de maxstringContention propriété sur le Objet xglDictionaryReaderquotas objet utilisé lors de la création du lecteur XML. Ligne 249, position 19. '.

J'ai essayé de modifier la valeur de MaxStringContentLength dans le fichier web.friguration client, mais une erreur est la même. Veuillez essayer de trouver la solution dès que possible.


1 commentaires

Pouvez-vous poster le contenu de vos fichiers de configuration sur le client et le serveur?


4 Réponses :


7
votes

Essayez d'augmenter cette valeur sur le serveur et le client:

<binding 
    name="myBinding"
    maxReceivedMessageSize="2147483647">
        <readerQuotas 
            maxDepth="2147483647"
            maxStringContentLength="2147483647"
            maxArrayLength="2147483647"
            maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
</binding>


4 commentaires

J'ai déjà vérifié ces paramètres mais cela échoue toujours. J'ai vérifié à l'exécution des valeurs des attributs mentionnés et ils étaient corrects.


@Ashish Ranjan, est votre point final configuré pour utiliser cette liaison personnalisée ( mybinding )?


Je n'utilise aucune liaison personnalisée ... Je viens de modifier les attributs de BasichttpLinding


Ashish, Darin signifie que vous auriez dû créer un BasichttpLinding pour remplacer et augmenter la valeur de MaxStringContenTlength à 2147483647. Pouvez-vous confirmer si vous avez configuré votre point de terminaison pour utiliser le même binidng avec l'attribut BindingConfiguration I.E,



12
votes

Ashish, Darin signifie que vous auriez dû créer un BasichttpLinding pour remplacer et augmenter la valeur de MaxStringContenTlength à 2147483647. Pouvez-vous confirmer si vous avez configuré le point de terminaison pour utiliser le même binidng avec l'attribut BindingConfiguration. Par exemple, vous avez créé une liaison comme celle-ci,

<endpoint  
     address="....."
     binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage" 
     contract="xxx" />


0 commentaires

-1
votes

La taille de MaxStringContentionL doit être augmentée. Mais vous ne devriez pas augmenter aveuglément toutes les valeurs à ce nombre. Par exemple, MaxDEPTH concerne les niveaux de nidification en XML, et vaut mieux la laisser à la valeur par défaut.


0 commentaires

1
votes

Comme toujours avec WCF, voici l'alternative programmatique pour augmenter la longueur de MaxStringContentL.

BasicHttpBinding binding = new BasicHttpBinding();
binding.ReaderQuotas.MaxStringContentLength = 2147483647

host.AddServiceEndpoint(contract, binding, address);


0 commentaires