Question WCF - Comment augmenter le quota de taille de message


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

Je reçois le message suivant lorsque j'exécute 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?


413
2018-05-19 18:04


origine


Réponses:


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

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

Et utilisez le nom de liaison dans votre configuration de point de terminaison, 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 valeur par défaut basse est essentiellement là pour empêcher les attaques de type DOS. En faisant 20000000 pour qu'une attaque DOS distribuée soit efficace, la taille par défaut de 64k nécessiterait un très grand nombre de clients pour maîtriser la plupart des serveurs de nos jours.


545
2018-05-19 18:06



Si vous obtenez toujours ce message d'erreur lors de l'utilisation du client de test WCF, c'est parce que le client a une MaxBufferSize réglage.

Pour corriger le problème:

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

Une liste de paramètres modifiables apparaîtra, y compris MaxBufferSize.

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


135
2017-08-05 06:11



Si vous créez dynamiquement vos liaisons WCF, 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;

84
2018-02-02 10:07



le WCF Test Client 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 maxReceivedMessageSize est 65536.

Pour le modifier, cliquez avec le bouton 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 êtes de retour dans la fenêtre WCF Test Client, cliquez sur Outils - Options.

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


39
2018-06-27 20:58



J'ai trouvé le moyen facile

--- cliquez avec le bouton droit sur le fichier de configuration webconfig ou app et cliquez sur EDIT WCF CONFIGURATION et accédez à bingdigs et sélectionnez yore service and right   side show maxReciveMessageSize donne un grand nombre ---


15
2018-03-30 06:39



Je résous 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>

7
2018-03-22 05:36



<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_Username" maxReceivedMessageSize="20000000"          maxBufferPoolSize="20000000">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" establishSecurityContext="false"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint
            binding="wsHttpBinding"
            bindingConfiguration="wsHttpBinding_Username"
            contract="Exchange.Exweb.ExchangeServices.ExchangeServicesGenericProxy.ExchangeServicesType"
            name="ServicesFacadeEndpoint" />
</client>


6
2018-01-26 12:38



J'ai résolu mon problème sur Bing Maps WPF sur mon projet Using CalculateRoute (). La solution dans mon cas était de définir les valeurs maxReceivedMessageSize et maxReceivedMessageSize sur l'attribut "httpTransport" pour la section "customBinding".

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

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IGeocodeService" />
            <binding name="BasicHttpBinding_IRouteService" />
        </basicHttpBinding>
        <customBinding>
            <binding name="CustomBinding_IGeocodeService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
            <binding name="CustomBinding_IRouteService">
                <binaryMessageEncoding />
              <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                                maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                                bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                                keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                                realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                                useDefaultWebProxy="true" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="BasicHttpBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IGeocodeService"
            contract="BingServices.IGeocodeService" name="CustomBinding_IGeocodeService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IRouteService"
            contract="BingServices.IRouteService" name="BasicHttpBinding_IRouteService" />
        <endpoint address="http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc/binaryHttp"
            binding="customBinding" bindingConfiguration="CustomBinding_IRouteService"
            contract="BingServices.IRouteService" name="CustomBinding_IRouteService" />
    </client>
</system.serviceModel>

6
2018-05-11 00:07



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 du test unitaire, vous devez configurer la configuration appropriée dans le projet de test.


2
2017-07-26 07:54