WCF – Comment augmenter le quota de taille de message

J’ai un service WCF qui renvoie 1000 enregistrements de la firebase database au client. J’ai un client ASP.NET WCF (j’ai ajouté une référence de service dans le projet d’application Web asp.net pour consumr WCF).

Je reçois le message suivant lorsque je lance l’application cliente:

Le quota maximal de taille de message pour les messages entrants (65536) a été dépassé. Pour augmenter le quota, utilisez la propriété MaxReceivedMessageSize sur l’élément de liaison approprié.

De l’aide? Comment augmenter le quota de taille de message?

Vous voudrez quelque chose comme ça pour augmenter les quotas de taille de message, dans le fichier App.config ou Web.config :

       

Et utilisez le nom de liaison dans votre configuration de noeud final, par exemple

 ... bindingConfiguration="basicHttp" ... 

La justification des valeurs est simple, elles sont suffisamment grandes pour accueillir la plupart des messages. Vous pouvez régler ce nombre en fonction de vos besoins. La faible valeur par défaut est essentiellement là pour empêcher les attaques de type DOS. Le rendre 20000000 permettrait à une attaque DOS dissortingbuée d’être efficace, la taille par défaut de 64k nécessiterait qu’un très grand nombre de clients vienne à bout de la plupart des serveurs de nos jours.

Si vous obtenez toujours ce message d’erreur lors de l’utilisation du client de test WCF, c’est parce que le client dispose d’un paramètre MaxBufferSize distinct.

Pour corriger le problème:

  1. Cliquez avec le bouton droit de la souris sur le nœud Fichier de configuration au bas de l’arbre.
  2. Sélectionnez Modifier avec SvcConfigEditor

Une liste de parameters modifiables apparaîtra, y compris MaxBufferSize.

Remarque: Les clients proxy générés automatiquement définissent également MaxBufferSize sur 65536 par défaut.

Si vous créez vos liaisons WCF de manière dynamic, voici le code à utiliser:

 BasicHttpBinding httpBinding = new BasicHttpBinding(); httpBinding.MaxReceivedMessageSize = Int32.MaxValue; httpBinding.MaxBufferSize = Int32.MaxValue; // Commented next statement since it is not required // httpBinding.MaxBufferPoolSize = Int32.MaxValue; 

Le client de test WCF a sa propre configuration client.

Exécutez le client de test et faites défiler vers le bas. Si vous double-cliquez sur le nœud Config File, vous verrez la représentation XML. Comme vous pouvez le voir, la maxReceivedMessageSize est 65536 .

Pour le modifier, cliquez avec le SvcConfigEditor droit sur l’arborescence du fichier de configuration et sélectionnez Modifier avec SvcConfigEditor . Lorsque l’éditeur s’ouvre, développez Liaisons et double-cliquez sur la liaison qui a été automatiquement générée.

Vous pouvez modifier toutes les propriétés ici, y compris maxReceivedMessageSize . Lorsque vous avez terminé, cliquez sur Fichier – Enregistrer .

Enfin, lorsque vous revenez à la fenêtre du client de test WCF, cliquez sur Outils – Options .

REMARQUE : décochez la case Toujours régénérer la configuration lors du lancement des services .

J’ai trouvé le moyen facile

— Faites un clic droit sur le fichier de configuration webconfig ou app et cliquez sur EDIT WCF CONFIGURATION pour accéder à bingdigs et sélectionnez yore service et right side show maxReciveMessageSize donne un grand nombre —

Je résous le problème … comme suit

                    

             

J’ai résolu mon problème sur Bing Maps WPF sur mon projet Using CalculateRoute (). La solution dans mon cas consistait à définir maxReceivedMessageSize et maxReceivedMessageSize sur l’atsortingbut “httpTransport” pour la section “customBinding”.

Je mets dans le fichier applications.config (es. MyApp.config) cette configuration:

                         

Une autre chose importante à considérer de mon expérience ..

Je vous conseille vivement de ne pas maximiser maxBufferPoolSize, car les tampons du pool ne sont jamais libérés tant que le domaine d’application (le pool d’applications) n’est pas recyclé.

Une période de trafic intense pourrait entraîner l’utilisation de beaucoup de mémoire et ne jamais la libérer.

Plus de détails ici:

N’oubliez pas que l’app.config du point d’entrée de l’exécution sera pris en compte, pas le projet de bibliothèque en cours qui gère les appels de service Web s’il en existe un.

Par exemple, si vous obtenez l’erreur lors de l’exécution du test unitaire, vous devez configurer la configuration appropriée dans le projet de test.

J’ai eu cette erreur lors de l’utilisation de ces parameters sur web.config

 System.ServiceModel.ServiceActivationException 

Je définis les parameters comme ceci:

               

Pour HTTP:

        

Pour TCP:

        

IMPORTANT:

Si vous essayez de transmettre un object complexe comportant de nombreux objects connectés (par exemple: une structure de données arborescente, une liste contenant de nombreux objects …), la communication échouera, quelle que soit la manière dont vous avez augmenté les quotas. Dans de tels cas, vous devez augmenter le nombre d’objects contenant:

    ...     

Pour moi, tout ce que j’ai à faire est d’append maxReceivedMessageSize="2147483647" au client app.config. Le serveur est resté intact.