493 Stimmen

WCF - Wie man die Nachrichtengrößenkontingente erhöht

Ich habe einen WCF-Dienst, der 1000 Datensätze aus der Datenbank an den Client zurückgibt. Ich habe einen ASP.NET WCF-Client (Ich habe dem ASP.NET-Webanwendungsprojekt einen Servicereferenz hinzugefügt, um WCF zu konsumieren).

Ich erhalte die folgende Meldung, wenn ich die Clientanwendung ausführe:

Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten (65536) wurde überschritten. Um das Kontingent zu erhöhen, verwenden Sie die MaxReceivedMessageSize-Eigenschaft auf dem entsprechenden Bindungselement.

Irgendwelche Hilfe? Wie kann ich das Nachrichtengrößenkontingent erhöhen?

1 Stimmen

Ich hatte das gleiche Problem, aber ich habe nur einen unfreundlichen Netzwerkfehler 400 erhalten, aber die Lösung war die Nachrichtengröße Sache.

2 Stimmen

Ich habe das Problem gelöst, indem ich die in [dem Link][1] genannten Schritte verwendet habe. [1]: stackoverflow.com/questions/7476853/…

0 Stimmen

Warum ist es standardmäßig so niedrig eingestellt? Sicherheit?

650voto

Nate Punkte 29413

Sie möchten etwas wie dieses verwenden, um die Größenbeschränkungen für Nachrichten in der App.config oder Web.config-Datei zu erhöhen:

Und verwenden Sie den Bindungsname in Ihrer Endpunkt-Konfiguration, z.B.

...
bindingConfiguration="basicHttp"
...

Die Begründung für die Werte ist einfach, sie sind ausreichend groß, um die meisten Nachrichten zu bewältigen. Sie können diese Zahl anpassen, um Ihren Anforderungen gerecht zu werden. Der niedrige Standardwert dient im Grunde dazu, DOS-artige Angriffe zu verhindern. Wenn Sie ihn auf 20000000 erhöhen würden, könnte ein verteilte DOS-Angriff wirksam sein, die Standardgröße von 64k erfordert heutzutage eine sehr große Anzahl von Clients, um die meisten Server zu überlasten.

22 Stimmen

Vielen Dank.. Diese Änderung muss in der Datei web.config der Client-Anwendung vorgenommen werden.

8 Stimmen

Sie müssen möglicherweise auch Änderungen auf dem Server vornehmen - falls Sie ein großes Datenset als Parameter an eine WCF-Methode senden müssen.

4 Stimmen

Ist es ein besonderer Grund für die Nachrichtengröße von 20000000?

167voto

Michael Rodrigues Punkte 4967

Wenn Sie immer noch diese Fehlermeldung erhalten, während Sie den WCF-Testclient verwenden, liegt dies daran, dass der Client eine separate MaxBufferSize-Einstellung hat.

Um das Problem zu beheben:

  1. Klicken Sie mit der rechten Maustaste auf den Knoten Config-Datei am unteren Ende des Baums
  2. Wählen Sie "Bearbeiten mit SvcConfigEditor"

Eine Liste der bearbeitbaren Einstellungen wird angezeigt, einschließlich MaxBufferSize.

Hinweis: Auto-generierte Proxy-Clients setzen MaxBufferSize standardmäßig auf 65536.

8 Stimmen

Warum vergesse ich das immer wieder? +1

9 Stimmen

Auf vs2013 wird SvcConfigEditor durch die Funktion "WCF-Konfiguration bearbeiten" ersetzt, falls Benutzer danach suchen.

0 Stimmen

Kann SVCconfigEditor nicht finden?

118voto

Bharath K Punkte 2049

Wenn Sie Ihre WCF-Bindungen dynamisch erstellen, verwenden Sie den folgenden Code:

BasicHttpBinding httpBinding = new BasicHttpBinding();
httpBinding.MaxReceivedMessageSize = Int32.MaxValue;
httpBinding.MaxBufferSize = Int32.MaxValue;
// Nächste Anweisung auskommentiert, da sie nicht erforderlich ist
// httpBinding.MaxBufferPoolSize = Int32.MaxValue;

0 Stimmen

Sie können es initialisieren. Natürlich können Sie es in Ihrer Konstruktormethode verwenden.

2 Stimmen

Nach 10 Jahren brauche ich das wieder, ich wünschte, ich könnte zweimal upvoten.

49voto

Jodee Dex Page Punkte 531

Der WCF Test Client hat seine eigene Client-Konfiguration.

Führen Sie den Testclient aus und scrollen Sie nach unten. Wenn Sie doppelt auf das Konfigurationsdatei-Knoten klicken, sehen Sie die XML-Repräsentation. Wie Sie sehen können, ist die maxReceivedMessageSize 65536.

Um dies zu bearbeiten, klicken Sie mit der rechten Maustaste auf den Konfigurationsdatei-Baumknoten und wählen Sie Bearbeiten mit SvcConfigEditor aus. Wenn der Editor geöffnet wird, erweitern Sie Bindungen und doppelklicken Sie auf die automatisch generierte Bindung.

Sie können hier alle Eigenschaften bearbeiten, einschließlich maxReceivedMessageSize. Wenn Sie fertig sind, klicken Sie auf Datei - Speichern.

Zuletzt, wenn Sie wieder im WCF Test Client-Fenster sind, klicken Sie auf Tools - Optionen.

NOTIZ: Deaktivieren Sie die Option Immer Konfiguration neu generieren beim Starten von Diensten.

2 Stimmen

Wahrscheinlich die beste Antwort hier!

3 Stimmen

Upvote aufgrund der Notiz, um die Option Immer Konfiguration neu generieren nicht zu aktivieren.

0 Stimmen

Einfachste Lösung meiner Meinung nach. Hat mir etwas Kopfschmerzen erspart.

25voto

NC64 Punkte 370

Ich fand den einfachen Weg

--- klicken Sie mit der rechten Maustaste auf die Webconfig- oder Appconfig-Datei, klicken Sie auf BEARBEITEN DER WCF-KONFIGURATION und gehen Sie zu bingdigs und wählen Sie Ihren Dienst aus und auf der rechten Seite geben Sie eine große Zahl für maxReciveMessageSize ein ---

2 Stimmen

Es war eine großartige Antwort, ich wusste nicht, dass ich von hier aus bearbeiten kann, danke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X