420 votes

WCF - Comment Augmenter la Taille de Message de Quota

J'ai un Service WCF qui renvoie 1000 enregistrements de base de données pour le client. J'ai un ASP.NET WCF client (j'ai ajouté une référence de service dans asp.net projet d'application web à consommer de la WCF).

Je reçois le message suivant quand je lance le client de l'application:

La taille maximale de message de quota pour les messages entrants (65536) a été dépassée. Pour augmenter le quota, l'utilisation le MaxReceivedMessageSize bien sur la liaison appropriée de l'élément.

Toute aide? Comment augmenter la taille de message de quota?

551voto

Nate Points 14101

Vous aurez envie de quelque chose de ce genre pour augmenter la taille du message quotas:

<bindings>
    <basicHttpBinding>
        <binding name="basicHttp" allowCookies="true"
                 maxReceivedMessageSize="20000000" 
                 maxBufferSize="20000000"
                 maxBufferPoolSize="20000000">
            <readerQuotas maxDepth="32" 
                 maxArrayLength="200000000"
                 maxStringContentLength="200000000"/>
        </binding>
    </basicHttpBinding>
</bindings>

La justification de ces valeurs est simple, ils sont suffisamment grands pour accueillir la plupart des messages. Vous pouvez ajuster ce nombre en fonction de vos besoins. La faible valeur par défaut est essentiellement là pour prévenir des attaques de type DOS. Rendant 20000000 permettrait une attaque par déni de service, pour être efficace, la taille par défaut de 64 ko nécessiterait un très grand nombre de clients à maîtriser la plupart des serveurs de ces jours.

137voto

Michael Rodrigues Points 2932

Si vous êtes toujours obtenir ce message d'erreur lors de l'utilisation du Client Test WCF, c'est parce que le client dispose d'un MaxBufferSize réglage.

Pour corriger le problème:

  1. Cliquez-droit sur le Fichier de configuration de nœud au bas de l'arbre
  2. Sélectionnez Modifier avec SvcConfigEditor

Une liste de paramètres modifiables apparaissent, y compris MaxBufferSize.

Remarque: l'Auto-proxy généré clients également définir MaxBufferSize à 65536 par défaut.

85voto

Bharath K Points 1253

Si vous êtes à la création de votre WCF liaisons dynamiquement voici le code à utiliser:

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

39voto

Jodee Dex Page Points 171

Le Client Test WCF a sa propre configuration de client.

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

Pour modifier cela, Cliquez-Droit sur le Fichier de Config du nœud de l'arborescence et sélectionnez Modifier Avec SvcConfigEditor. Lorsque l'éditeur s'ouvre développer les Liaisons et double-cliquez sur la liaison qui a été généré automatiquement.

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

Enfin, lorsque vous êtes de retour au Client Test WCF fenêtre, cliquez sur Outils - Options.

NOTE: Décochez la case Toujours se régénérer config lors du lancement de services.

7voto

- Je résoudre le problème comme suit ...

    <bindings>
  <netTcpBinding>
    <binding name="ECMSBindingConfig" closeTimeout="00:10:00" openTimeout="00:10:00"
      sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
      maxReceivedMessageSize="2147483647" portSharingEnabled="true">
      <readerQuotas maxArrayLength="2147483647" maxNameTableCharCount="2147483647"
          maxStringContentLength="2147483647" maxDepth="2147483647"
          maxBytesPerRead="2147483647" />
      <security mode="None" />
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ECMSServiceBehavior">
      <dataContractSerializer ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceTimeouts transactionTimeout="00:10:00" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="100"
        maxConcurrentInstances="100" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: