it-swarm.com.de

maxReceivedMessageSize nicht korrigiert 413: Anforderungsobjekt zu groß

Mein Aufruf an meinen WCF-Webdienst schlägt mit System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large. fehl.

Fiddler überprüfend, sehe ich, dass ich sende:

Inhaltslänge: 149839

Welches ist über 65 KB.

Die WCF-Ablaufverfolgung auf dem Server aktivieren, sehe ich:

System.ServiceModel.ProtocolException: Das maximale Kontingent für die Nachrichtengröße für eingehende Nachrichten (65536) wurde überschritten. .__ erhöhen. Kontingent verwenden Sie die MaxReceivedMessageSize-Eigenschaft für das entsprechende Bindungselement.

Das Hinzufügen dieser Eigenschaft löst das Problem nicht.

Ich habe es gerade mit dieser Eigenschaft ausprobiert, und (später) mit verschiedenen anderen, die von Postern vorgeschlagen wurden. Folgendes habe ich derzeit (auf dem Server) :

<basicHttpBinding>

  <binding name="PricerServiceSoap"
    closeTimeout="00:10:00" openTimeout="00:10:00"
    receiveTimeout="00:10:00" sendTimeout="00:10:00"
    maxBufferSize="2147483647"    
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">

    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
      maxArrayLength="2147483647" maxBytesPerRead="2147483647"
      maxNameTableCharCount="2147483647" />
  </binding>

</basicHttpBinding>

Mein einziger Endpunkt (unter <client>) ist:

<endpoint address="/NetPricingService/Service.asmx"
  binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
  contract="Pricing.PricerService.PricerServiceSoap"
  name="PricerServiceSoap" />

Ich habe auch hinzugefügt:

<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

unter <behavior>.

Ich habe sogar ausgeführt (für IIS 7):

%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost

Nichts macht einen Unterschied.

Ein Haken ist, dass dies ein WCF-Dienst ist, der einen älteren ASMX-Dienst ersetzen soll. Das Dienstskelett wurde mit svcutil aus der vorhandenen WSDL generiert. Ich kann die Client-Konfigurationen nicht ändern (und die Clients sind in mehreren Sprachen). Mein Testclientprojekt hat den Dienst mit Webreferenz hinzufügen (unter Add Service Reference / Advanced) importiert, sodass ich keine WCF-Konfiguration habe. Der Testclient funktioniert jedoch, wenn ich auf den älteren ASMX-Dienst verweise.

Wie kann ich das beheben oder diagnostizieren?

Zusätzliche Information

Wenn ich den Microsoft Service Configuration Editor zum Generieren der Konfiguration verwende (Einstellung von maxReceivedMessageSize und maxBufferSize), funktioniert es. Das Problem ist, dass der Endpunkt dann unter <service> angegeben wird und ich nicht die relative Adresse /NetPricingService/Service.asmx angeben kann. Wenn ich die Bindungen in der von svcutil generierten config bearbeite (wo sich der Endpunkt unter <client> befindet), funktioniert es nicht mit großen Anforderungen.

26
TrueWill

Die Antwort starrte mir ins Gesicht.

Die von svcutil generierte Konfiguration war für den Client. Ich habe es auf dem Server benutzt.

Ich habe die Bindungen für die unter <client> angegebenen Endpunkte bearbeitet, was für den Dienst absolut keine Rolle spielte.

Durch das Hinzufügen eines richtigen <service>-Endpunkts und das Festlegen von maxReceivedMessageSize und maxBufferSize für die Bindung wurde das Problem behoben.

25
TrueWill

Ich hatte ein ähnliches Problem ... Für mich bestand das Problem darin, dass mein Endpunkt die Bindung nicht explizit mitbindingConfigurationbenannte und daher irgendwo ein Standardeinsatz verwendet werden muss.

Ich hatte: 

<webHttpBinding>
    <binding 
        name="myXmlHttpBinding" 
        maxReceivedMessageSize="10485760" 
        maxBufferSize="10485760">
        <readerQuotas 
            maxDepth="2147483647" 
            maxStringContentLength="2147483647" 
            maxArrayLength="2147483647" 
            maxBytesPerRead="2147483647" 
            maxNameTableCharCount="2147483647"/>
        <security mode="None"/>
    </binding>
</webHttpBinding>

und mein Endpunkt definiert als:

<service 
    name="blah.SomeService">
    <endpoint 
        address="" 
        behaviorConfiguration="WebHttpBehavior" 
        binding="webHttpBinding" 
        contract="blah.ISomeService">

        <identity>
            <dns value="localhost"/>
        </identity>
    </endpoint>
</service>

Es hat funktioniert, sobald ich den Endpunkt geändert habe:

  <service name="blah.SomeService">
    <endpoint address="" 
        behaviorConfiguration="WebHttpBehavior" 
        binding="webHttpBinding" 
        bindingConfiguration="myXmlHttpBinding" 
        contract="blah.ISomeService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
  </service>
24
matt burns

Ich hatte auch dieses Problem und erkannte in Fiddler, dass die maximale Content-Length, die funktionierte, am Ende 30000000 war.

Nachdem ich überprüft hatte, ob meine WCF-Konfiguration korrekt war, fand ich einen Artikel, in dem eine Änderung der Einstellung IIS), Anforderungsfilterung, vorgeschlagen wurde.

Fehler beim Hochladen großer Dateien für eine Webanwendung, die den WCF-Dienst aufruft - 413 Entität zu groß anfordern

  1. Öffnen Sie den IIS Manager
  2. Wählen Sie Ihre Anwendung aus
  3. Wählen Sie das Symbol Anforderungsfilterung.
  4. Wählen Sie Funktionseinstellungen bearbeiten ... (rechter Bereich)
  5. Passen Sie die maximal zulässige Inhaltslänge (Bytes) an. Die Standardeinstellung ist 30000000

beispiel für eine web.config-Datei

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="50000000" />
    </requestFiltering>
  </security>
</system.webServer>
2
mkdave99

ich habe Dinge aus 10 verschiedenen Blogs probiert und mein Kollege hat es herausgefunden. Wir mussten zusätzlich zum basicHttpBinding-Abschnitt einen basicHttpsBinding-Abschnitt hinzufügen. Wir haben einen Webapi-Service, der wcf anruft. Die webapi-Methode hat den zu großen Fehler der Entität beim Aufrufen der wcf-Servicemethode erkannt. Diese Änderung wurde in der Datei web.config des wcf-Dienstes angewendet.

1
dmurphy

Fügen Sie diese Lösung für mich hinzu:

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_Example"
 maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647">
            </binding>
        </basicHttpBinding>
    </bindings>
0
Zvi Redler