Ich habe einen WCF-Dienst mit .NET 4.0 geschrieben, der auf meinem Windows 7 x64
Ultimate-System mit IIS 7.5 gehostet wird . Eine der Dienstmethoden hat ein 'Objekt' als Argument und ich versuche, ein Byte [] zu senden, das ein Bild enthält. Solange die Dateigröße dieses Bildes weniger als ca. 48KB, alles geht gut. Wenn ich jedoch versuche, ein größeres Bild hochzuladen, gibt der WCF-Dienst einen Fehler zurück: (413) Request Entity Too Large.
Natürlich habe ich 3 Stunden damit verbracht, die Fehlermeldung zu googeln, und jedes Thema, das ich zu diesem Thema gesehen habe, schlägt vor, die Eigenschaft 'uploadReadAheadSize' zu erhöhen. Ich habe also die folgenden Befehle verwendet (10485760 = 10 MB):
"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"
"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"
Ich habe auch IIS Manager verwendet, um den Wert festzulegen, indem ich die Site öffne und unter Verwaltung zu "Konfigurationseditor" gehe. Leider erhalte ich immer noch den Fehler Request Entity Too Large und es wird wirklich frustrierend!
Weiß jemand, was ich sonst noch versuchen kann, um diesen Fehler zu beheben?
Antworten:
Das ist kein Problem von IIS, sondern das Problem von WCF. WCF beschränkt Nachrichten standardmäßig auf 65 KB, um Denial-of-Service-Angriffe mit großen Nachrichten zu vermeiden. Auch wenn Sie kein MTOM verwenden, wird Byte [] an einen Base64-codierten String gesendet (33% mehr Größe) => 48 KB * 1,33 = 64 KB
Um dieses Problem zu beheben, müssen Sie Ihren Dienst neu konfigurieren, um größere Nachrichten zu akzeptieren. Dieses Problem löste zuvor einen 400 Bad Request-Fehler aus, aber in der neueren Version verwendete WCF 413, den korrekten Statuscode für diesen Fehlertyp.
Sie müssen
maxReceivedMessageSize
Ihre Bindung festlegen . Möglicherweise müssen Sie auch einstellenreaderQuotas
.quelle
Ich hatte das gleiche Problem mit IIS 7.5 mit einem WCF-REST-Service. Wenn Sie versuchen, eine Datei über 65 KB per POST hochzuladen, wird der Fehler 413 "Anforderungsentität zu groß" zurückgegeben.
Das erste, was Sie verstehen müssen, ist, welche Art von Bindung Sie in der web.config konfiguriert haben. Hier ist ein großartiger Artikel ...
BasicHttpBinding vs WsHttpBinding vs WebHttpBinding
Wenn Sie einen REST-Service haben, müssen Sie ihn als "webHttpBinding" konfigurieren. Hier ist das Update:
quelle
Ich hatte das gleiche Problem und stellte das Problem ein
uploadReadAheadSize
:http://www.iis.net/configreference/system.webserver/serverruntime
"Der Wert muss zwischen 0 und 2147483647 liegen."
Es kann einfach in der applicationHost.config-fle festgelegt werden, wenn Sie keine cmd-Sache machen möchten.
Es befindet sich in
WindowsFOLDER\System32\inetsrv\config
(2008 Server).Sie müssen es mit dem Editor öffnen. Führen Sie zuerst eine Sicherung der Datei durch.
Gemäß den Kommentaren in der Konfiguration wird empfohlen, Abschnitte mithilfe eines Standort-Tags zu entsperren:
Sie können also unten schreiben (da es vorher nicht existiert). Ich schreibe
maxvalue
hier - schreibe deinen eigenen Wert, wenn du willst.Wenn Sie es
</configuration>
zum Beispiel vorher setzen , wissen Sie, wo Sie es haben.Hoffe das löst deine Probleme. Es war ein SSL-Overhead-Problem für mich, bei dem zu viel Post die Anwendung einfrierte und einen (413) Request Entity Too Large- Fehler auslöste .
quelle
maxReceivedMessageSize
auf int.MaxValue eingestellt war, war dies der Trick. Ich frage mich, ob es größere Bedenken gibt, diese Option auch auf int.MaxValue zu setzen.Ich habe diese Fehlermeldung erhalten, obwohl die
max
Einstellungen in der Bindung meiner WCF-Dienstkonfigurationsdatei festgelegt wurden:Es schien, als würden diese Bindungseinstellungen nicht angewendet, daher die folgende Fehlermeldung:
.
Das Problem
Ich erkennen , dass das
name=""
Attribut im<service>
Tag von demweb.config
ist nicht ein Freitextfeld, wie ich dachte , es wäre. Dies ist der vollständig qualifizierte Name einer Implementierung eines Servicevertrags, wie auf dieser Dokumentationsseite angegeben .Wenn dies nicht übereinstimmt, werden die Bindungseinstellungen nicht angewendet!
Ich hoffe das erspart jemandem etwas Schmerz ...
quelle
Wenn Sie auf dieses Problem stoßen, obwohl Sie alle Lösungen in diesem Thread ausprobiert haben und über SSL (z. B. https) eine Verbindung zum Dienst herstellen, kann dies hilfreich sein:
http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top
Zusammenfassend lässt sich sagen, dass die Zertifikatsaushandlung zwischen dem Client und dem Dienst zufällig fehlschlägt, wenn Ihre Anforderungen groß genug sind (falls der Link in Zukunft nicht mehr funktioniert). Um dies zu verhindern, müssen Sie eine bestimmte Einstellung für Ihre SSL-Bindungen aktivieren. Auf Ihrem IIS-Server müssen Sie folgende Schritte ausführen:
netsh http show sslcert
. Dadurch erhalten Sie Ihre aktuelle Konfiguration. Sie möchten dies irgendwie speichern, damit Sie später erneut darauf verweisen können.netsh http delete sslcert <ipaddress>:<port>
wo<ipaddress>:<port>
sich der IP: -Port befindet, der in der zuvor gespeicherten Konfiguration angezeigt wird.netsh http add sslcert
hier (MSDN) anzeigen, aber in den meisten Fällen sieht Ihr Befehl folgendermaßen aus:netsh http add sslcert ipport=<ipaddress>:<port> appid=<application ID from saved config including the {}> certhash=<certificate hash from saved config> certstorename=<certificate store name from saved config> clientcertnegotiation=enable
Wenn Sie mehrere SSL-Bindungen haben, wiederholen Sie den Vorgang für jede dieser Bindungen. Hoffentlich hilft dies, jemand anderem die Stunden und Stunden der Kopfschmerzen zu ersparen, die mir dieses Problem verursacht hat.
BEARBEITEN: Nach meiner Erfahrung können Sie
netsh http add sslcert
den Befehl nicht direkt über die Befehlszeile ausführen . Sie müssen zuerst die Eingabeaufforderung netsh eingeben, indem Sie Folgendes eingebennetsh
und dann Ihren Befehl wie folgt ausgebenhttp add sslcert ipport=...
, damit er funktioniert.quelle
Dies hat mir geholfen, das Problem zu lösen (eine Zeile - aufgeteilt auf Lesbarkeit / Kopierbarkeit):
quelle
Für mich hat das Setzen
uploadReadAheadSize
von int.MaxValue auch das Problem behoben, nachdem auch die Grenzen für die WCF-Bindung erhöht wurden.Es scheint, dass bei Verwendung von SSL der gesamte Body der Anforderungsentität vorinstalliert ist, für den diese Metabase-Eigenschaft verwendet wird.
Weitere Informationen finden Sie unter:
Die Seite wurde nicht angezeigt, da die Anforderungsentität zu groß ist. iis7
quelle
Für alle anderen, die jemals nach einem IIS-WCF-Fehler gesucht haben 413: Entität zu groß anfordern und einen WCF-Dienst in Sharepoint verwenden, sind dies die Informationen für Sie. Die auf anderen Websites / Posts vorgeschlagenen Einstellungen im Anwendungshost und in der Datei web.config funktionieren in SharePoint nicht, wenn MultipleBaseAddressBasicHttpBindingServiceHostFactory verwendet wird. Sie können SP Powershell verwenden, um den SPWebService.Content-Dienst abzurufen, ein neues SPWcvSettings-Objekt zu erstellen und die Einstellungen wie oben für Ihren Dienst zu aktualisieren (sie sind nicht vorhanden). Denken Sie daran, beim Erstellen und Hinzufügen der Einstellungen nur den Namen des Dienstes (z. B. [yourservice.svc]) zu verwenden. Weitere Informationen finden Sie auf dieser Website unter https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service
quelle
In meinem Fall musste ich die "Maximal empfangene Nachrichtengröße" des Empfangsspeicherorts in BizTalk erhöhen. Das hat auch einen Standardwert von 64K und so wurde jede Nachricht von BizTAlk zurückgesendet, unabhängig davon, was ich in meiner web.config konfiguriert habe
quelle
Ich konnte dies lösen, indem ich einen Dummy-Aufruf (z. B. IsAlive, der true zurückgibt) unmittelbar vor der Anforderung mit großem Inhalt auf demselben wcf-Kanal / Client ausführte. Anscheinend wird die SSL-Verhandlung beim ersten Anruf durchgeführt. Sie müssen also die Größe von Uploadreadaheads nicht erhöhen.
quelle
Für ein Problem hat der Remoteserver eine unerwartete Antwort zurückgegeben: (413) Anforderungsentität zu groß auf WCF mit Resful
Bitte beachten Sie meine Konfiguration erklären
quelle
In meinem Fall wurde diese Fehlermeldung angezeigt, weil der Namespace des Dienstes geändert wurde und das Dienst-Tag auf den älteren Namespace verwiesen wurde. Ich habe den Namespace aktualisiert und der Fehler verschwindet:
quelle
In IIS Express mit Visual Studio 2017 ist ein ähnlicher Fehler aufgetreten.
Lösen Sie dies durch Bearbeiten
\.vs\config\applicationhost.config
. Wechseln SieserverRuntime
vonDeny
zuAllow
wie folgt:Wenn dieser Wert nicht bearbeitet wird, wird beim Einstellen
uploadReadAheadSize
folgende Fehlermeldung angezeigt :Bearbeiten Sie dann
Web.config
mit den folgenden Werten:quelle