Envoi d’object au service WCF. MaxSsortingngContentLength (8192 octets) dépassé lors de la désérialisation

J’ai créé un service Web WCF simple avec une méthode: SubmitTicket (flightticket ft, nom d’utilisateur de la chaîne, mot de passe de la chaîne)

Du côté du client, j’ai une application pour remplir un formulaire (un billet d’avion) ​​et l’envoyer à ce service Web nouvellement créé. Lorsque cet object flightticket dépasse 8192 octets, l’erreur suivante apparaît:

“Une erreur s’est produite lors de la désérialisation de l’object de type flightticket. Le quota de longueur de contenu de chaîne maximal (8192) a été dépassé lors de la lecture de données XML. Ce quota peut être augmenté en modifiant la propriété MaxSsortingngContentLength sur l’object XmlDictionaryReaderQuotas utilisé lors de la création du lecteur XML”

J’ai effectué des recherches en ligne et constaté que je devais définir MaxSsortingngContentLength dans web.config (serveur) et app.config (client) sur un nombre plus élevé. Le problème, c’est que j’ai essayé toutes les combinaisons possibles de parameters dans les deux fichiers de configuration à partir de la lecture de divers blogs et sites, mais cela échoue TOUJOURS avec la même erreur!

J’ai attaché mon code de configuration client et serveur (tel qu’il est pour le moment, il a subi de nombreux changements au cours de la journée, sans succès).

Une chose que j’ai remarquée est que le fichier configuration.svcinfo de mon application client semble toujours afficher 8192 pour MaxSsortingngContentLength lorsque je mets à jour la référence de service. Il semble prendre toutes les valeurs par défaut même si je définis explicitement les propriétés de liaison. Pas sûr que cela soit lié à mon problème, mais mérite d’être mentionné.


Voici le code app.config / web.config applicable pour définir les liaisons de points de terminaison:

<<<<>>>>

                     

<<<<>>>>

     

Je pense que le problème est que votre service ne récupère pas sa configuration car vous avez défini le nom du service sur FlightTicketWebService, alors que je suppose que le type réel se trouve dans un espace de noms. Qualifiez complètement le nom du service avec l’espace de noms et il devrait récupérer votre configuration

Il s’agit essentiellement d’un sous-produit de la fonctionnalité de point d’extrémité par défaut WCF 4 qui, s’il ne trouve aucune configuration correspondante, place les points d’extrémité avec la configuration par défaut.

C’est la réponse! J’ai cherché partout la solution à ce problème dans WCF 4.0, et cette entrée de Richard Blewett était la dernière pièce du puzzle.

Principales choses tirées de mes recherches:

  • si l’exception est levée par le service, alors ne modifiez que le fichier Server Web.config; ne t’inquiète pas pour le client
  • créer un basicHttpBinding personnalisé:
     
  • ajoutez les valeurs plus grandes de readerQuota (la plus grande possible indiquée ici, ajustez au goût)
       
  • créer une entrée de service , avec un noeud final mappé sur la liaison personnalisée. Le mappage se produit lorsque bindingConfiguration du sharepoint terminaison est identique au nom du lien:
  • Assurez-vous que le nom du service et la valeur du contrat sont pleinement qualifiés – utilisez l’espace de noms et le nom de la classe.