Das maximale Kontingent für die Nachrichtengröße für eingehende Nachrichten (65536) wurde überschritten


73

Ich bekomme diese Ausnahme, wenn ich Spielraum für wenige Tabellen erstelle. Alle diese Tabellen haben ein riesiges Design

<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>

Ich habe MaxReceivedMessageSizeauf 2147483647 gemacht , aber es gibt mir immer noch unter Ausnahme in dieser Zeile

 client.GetTableDescription(scopeName, syncTable)

Das maximale Kontingent für die Nachrichtengröße für eingehende Nachrichten (65536) wurde überschritten.
Verwenden Sie zum Erhöhen des Kontingents die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement.




Antworten:


108

Gemäß dieser Antwort auf die Frage

Sie werden so etwas wollen:

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

Bitte lesen Sie dort auch Kommentare zur akzeptierten Antwort, die wertvolle Beiträge enthalten.


15

Wenn Sie CustomBinding verwenden, müssen Sie lieber Änderungen am httptransport-Element vornehmen. Stellen Sie es als ein

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

1
Ich wünschte, ich könnte diese 100X positiv bewerten. Ich frage mich, wie viele Stunden meines Lebens die WCF-Konfiguration verschwendet hat.
McGuireV10

Ja, du hast mir auch eine
Menge

12

Sie müssen auch maxBufferSize erhöhen . Beachten Sie auch, dass Sie möglicherweise die readerQuotas erhöhen müssen .


Warum markiert Visual Studio "maxBufferSize" als nicht zulässig? Ich habe VS 2010.
FrenkyB

5
Für zukünftige Besucher: maxBufferSizemuss übereinstimmen maxReceivedMessageSize, sonst kann ein Fehler auftreten.
AgentFire

11

Sie müssen die Änderungen in der Bindungskonfiguration (in der Datei app.config) auf dem SERVER und dem CLIENT vornehmen, da sie sonst nicht wirksam werden.

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

30
Diese Antwort brachte mich buchstäblich zum Lachen :)
Carrie Kendall

1
Aber es ist wahr. Ich hatte das gleiche Problem, bis ich die Einstellungen auf dem Client geändert habe. Dann war es OK.
FrenkyB

1
Wenn jemand ein ähnliches Problem hat. Ich habe alles auf der WCF eingerichtet, aber ich habe immer noch eine Fehlermeldung erhalten. Auf dem Client habe ich unten Code hinzugefügt und danach war es OK. Vielen Dank @CarrieKendall. <system.serviceModel> <bindings> <wsHttpBinding> <binding name = "WSHttpBinding_ISotechWcfForWebService" maxBufferPoolSize = "2147483647" maxReceivedMessageSize = "2147483647"> <security mode = "None" /> </ bind>
FrenkyB

1
Gleiche Einstellungen auf der Serverseite mit Code: BasicHttpBinding bind01 = new BasicHttpBinding (); bind01.Security.Mode = BasicHttpSecurityMode.None; bind01.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; bind01.MaxReceivedMessageSize = int.MaxValue; bind01.MaxBufferPoolSize = int.MaxValue; bind01.MaxBufferSize = int.MaxValue; bind01.ReaderQuotas.MaxDepth = 32; bind01.ReaderQuotas.MaxArrayLength = int.MaxValue; bind01.ReaderQuotas.MaxStringContentLength = int.MaxValue; bind01.ReceiveTimeout = new TimeSpan (0, 10, 0);
FrenkyB

Das Hinzufügen von maxReceivedMessageSize = "2147483647" auf der Clientseite hat mein Problem behoben. Vielen Dank
gewähltOne Thabs

8

Das Aktualisieren der Konfiguration hat bei mir nicht funktioniert, aber ich konnte die Bindung programmgesteuert bearbeiten:

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;
}

1
Auf welchen Teil des WCF-Dienstes haben Sie dies gesetzt?
Malcolm Salvador

@ Malky.Kid Ich habe diesen Client erstellt, um einen .net-basierten Seifen-Webdienst aufzurufen.
p_champ

5

Das hat bei mir funktioniert:

 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

1
Wo platzieren Sie das? in der Klasse?
Malcolm Salvador

0

Meine Lösung bestand darin, den Parameter "-OutBuffer 2147483647" in meiner Abfrage zu verwenden, der Teil der allgemeinen Parameter ist. PS C:> Get-Help about_CommonParameters -Full


0

Für mich wurden die Einstellungen in web.config/ app.configignoriert. Am Ende habe ich meine Bindung manuell erstellt, wodurch das Problem für mich gelöst wurde:

var httpBinding = new BasicHttpBinding()
{
    MaxBufferPoolSize = Int32.MaxValue,
    MaxBufferSize = Int32.MaxValue,
    MaxReceivedMessageSize = Int32.MaxValue,
    ReaderQuotas = new XmlDictionaryReaderQuotas()
    {
        MaxArrayLength = 200000000,
        MaxDepth = 32,
        MaxStringContentLength = 200000000
    }
};
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.