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.

Onkar
quelle

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.

Sebastian Zaklada
quelle
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>
Softec
quelle
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 .

RQDQ
quelle
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>
flayn
quelle
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;
}
p_champ
quelle
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
Denis
quelle
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

user3499962
quelle
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
    }
};
MichaelCleverly
quelle