web-dev-qa-db-fra.com

Le quota de taille maximale des messages entrants (65 536) a été dépassé

Je reçois cette exception tout en créant de la place pour quelques tables toutes ces tables ont un design énorme

<bindings>
    <wsHttpBinding>
        <binding name="wsHttpBinding_ISyncServices" closeTimeout="00:10:00"
            openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
            transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
            <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
            <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
            <security mode="Message">
                <transport clientCredentialType="Windows"
                    proxyCredentialType="None" realm="">
                    <extendedProtectionPolicy policyEnforcement="Never" />
                </transport>
                <message clientCredentialType="Windows"
                    negotiateServiceCredential="true" algorithmSuite="Default" />
            </security>
        </binding>
    </wsHttpBinding>
</bindings>

J'ai fait MaxReceivedMessageSize à 2147483647 Mais ça me donne toujours une exception en dessous de cette ligne

 client.GetTableDescription(scopeName, syncTable)

Le quota de taille maximale des messages entrants (65 536) a été dépassé.
Pour augmenter le quota, utilisez la propriété MaxReceivedMessageSize sur l'élément de liaison approprié.

62
Onkar

Selon la réponse de cette question

Vous voudrez quelque chose comme ça:

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

S'il vous plaît également lire les commentaires à la réponse acceptée ici, ceux-ci contiennent une contribution précieuse.

96
Sebastian Zaklada

Vous devez également augmenter maxBufferSize . Notez également que vous devrez peut-être augmenter le nombre de readerQuotas .

12
RQDQ

Vous devez apporter les modifications dans la configuration de la liaison (dans le fichier app.config) sur le serveur et le client, sinon cela ne prendra pas effet.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647 " max...=... />
        </basicHttpBinding>
       </bindings>
</system.serviceModel>
7
flayn

Si vous utilisez CustomBinding, vous devez plutôt apporter des modifications à l'élément httptransport . Définissez-le comme

<customBinding> <binding ...> ... <httpsTransport maxReceivedMessageSize="2147483647"/> </binding> </customBinding>

6
Softec

Cela a fonctionné pour moi:

 Dim binding As New WebHttpBinding(WebHttpSecurityMode.Transport)
 binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
 binding.MaxBufferSize = Integer.MaxValue
 binding.MaxReceivedMessageSize = Integer.MaxValue
 binding.MaxBufferPoolSize = Integer.MaxValue
5
Denis

Faire des changements dans la configuration ne m'a pas aidé. Suivre a bien fonctionné

private YourAPIClient GetClient()
    {
        Uri baseAddress = new Uri(APIURL);
        var binding = new BasicHttpBinding();
        binding.MaxReceivedMessageSize = 20000000;
        binding.MaxBufferSize = 20000000;
        binding.MaxBufferPoolSize = 20000000;
        binding.AllowCookies = true;
        var readerQuotas = new XmlDictionaryReaderQuotas();
        readerQuotas.MaxArrayLength = 20000000;
        readerQuotas.MaxStringContentLength = 20000000;
        readerQuotas.MaxDepth = 32;
        binding.ReaderQuotas = readerQuotas;
        if (baseAddress.Scheme.ToLower() == "https")
            binding.Security.Mode = BasicHttpSecurityMode.Transport;
        var client = new YourAPIClient(binding, new EndpointAddress(baseAddress));
        return client;
    }
2
p_champ

Ma solution a été d'utiliser le paramètre "-OutBuffer 2147483647" dans ma requête, qui fait partie des paramètres communs . PS C:> Get-Help about_CommonParameters -Full

0
user3499962

Pour moi, les paramètres dans web.config/app.config ont été ignorés. J'ai fini par créer manuellement ma reliure, ce qui a résolu le problème pour moi:

var httpBinding = new BasicHttpBinding()
{
    MaxBufferPoolSize = Int32.MaxValue,
    MaxBufferSize = Int32.MaxValue,
    MaxReceivedMessageSize = Int32.MaxValue,
    ReaderQuotas = new XmlDictionaryReaderQuotas()
    {
        MaxArrayLength = 200000000,
        MaxDepth = 32,
        MaxStringContentLength = 200000000
    }
};
0
MichaelCleverly