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 im asp.net-Webanwendungsprojekt eine Dienstreferenz hinzugefügt, um WCF zu verwenden).
Beim Ausführen der Clientanwendung wird folgende Meldung angezeigt:
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.
Irgendeine Hilfe? Wie kann das Kontingent für die Nachrichtengröße erhöht werden?
Antworten:
Sie möchten, dass so etwas die Kontingente für die Nachrichtengröße in der Datei App.config oder Web.config erhöht :
Verwenden Sie den Bindungsnamen in Ihrer Endpunktkonfiguration, z
Die Begründung für die Werte ist einfach, sie sind ausreichend groß, um die meisten Nachrichten aufzunehmen. Sie können diese Nummer an Ihre Bedürfnisse anpassen. Der niedrige Standardwert dient grundsätzlich dazu, Angriffe vom Typ DOS zu verhindern. Wenn 20000000 aktiviert wird, kann ein verteilter DOS-Angriff effektiv ausgeführt werden. Die Standardgröße von 64 KB würde heutzutage eine sehr große Anzahl von Clients erfordern, um die meisten Server zu überlasten.
quelle
Wenn diese Fehlermeldung bei Verwendung des WCF- Testclients weiterhin angezeigt wird , liegt dies daran, dass der Client über eine separate MaxBufferSize- Einstellung verfügt.
So beheben Sie das Problem:
Eine Liste der bearbeitbaren Einstellungen wird angezeigt, einschließlich MaxBufferSize.
Hinweis: Automatisch generierte Proxy-Clients setzen MaxBufferSize standardmäßig auf 65536.
quelle
Wenn Sie Ihre WCF-Bindungen dynamisch erstellen, ist folgender Code zu verwenden:
quelle
Der WCF-Testclient verfügt über eine eigene Clientkonfiguration.
Führen Sie den Testclient aus und scrollen Sie nach unten. Wenn Sie auf den Knoten Konfigurationsdatei doppelklicken, wird die XML-Darstellung angezeigt. Wie Sie sehen können,
maxReceivedMessageSize
ist das65536
.Um dies zu bearbeiten, klicken Sie mit der rechten Maustaste auf den Baumknoten Konfigurationsdatei und wählen Sie Bearbeiten mit
SvcConfigEditor
. 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 .Wenn Sie wieder im Fenster des WCF-Testclients sind, klicken Sie auf Extras - Optionen .
Hinweis : Deaktivieren Sie das Kontroll immer Regenerat Config , wenn Dienste starten .
quelle
Always regenerate config
Option.Ich habe den einfachen Weg gefunden
quelle
Ich löse das Problem ... wie folgt
quelle
Ich habe mein Problem mit Bing Maps WPF in meinem Projekt mit CalculateRoute () gelöst. In meinem Fall bestand die Lösung darin, die Werte maxReceivedMessageSize und maxReceivedMessageSize für das Attribut "httpTransport" für den Abschnitt "customBinding" festzulegen.
Ich habe in der Datei applications.config (es. MyApp.config) folgende Konfiguration festgelegt:
quelle
quelle
Für HTTP:
Für TCP:
WICHTIG:
Wenn Sie versuchen, ein komplexes Objekt mit vielen verbundenen Objekten zu übergeben (z. B. eine Baumdatenstruktur, eine Liste mit vielen Objekten ...), schlägt die Kommunikation fehl, unabhängig davon, wie Sie die Kontingente erhöht haben. In solchen Fällen müssen Sie die Anzahl der enthaltenen Objekte erhöhen:
quelle
maxItemsInObjectGraph
war die (schnelle) Lösung für mich. Wenn Sie dies jedoch erhöhen, sollten Sie darüber nachdenken, ob die bessere Lösung für Ihre Anwendung darin besteht, Daten in Blöcken anzufordern, im Gegensatz zu einem riesigen Objektdiagramm, das Ressourcen belasten kann.Für mich war alles, was ich tun musste
maxReceivedMessageSize="2147483647"
, dem Client app.config hinzuzufügen. Der Server blieb unberührt.quelle
Eine weitere wichtige Sache aus meiner Erfahrung zu berücksichtigen ..
Ich würde dringend empfehlen, maxBufferPoolSize NICHT zu maximieren, da Puffer aus dem Pool erst freigegeben werden, wenn die App-Domäne (dh der Anwendungspool) recycelt wird.
Eine Zeit mit hohem Datenverkehr kann dazu führen, dass viel Speicher verwendet und nie freigegeben wird.
Weitere Details hier:
quelle
Vergessen Sie nicht, dass die app.config des Ausführungseintrittspunkts berücksichtigt wird, nicht die im Klassenbibliotheksprojekt, die Web-Service-Aufrufe verwaltet, falls vorhanden.
Wenn Sie beispielsweise beim Ausführen des Komponententests den Fehler erhalten, müssen Sie im Testprojekt die entsprechende Konfiguration einrichten.
quelle
Ich habe diesen Fehler erhalten, wenn ich diese Einstellungen auf web.config verwendet habe
Ich stelle Einstellungen wie folgt ein:
quelle
bindings
Element ziemlich deutlich auf und veröffentlichte es als Teil seiner Antwort erneut. Diese2000000
Werte sind ziemlich unterschiedlich.