1 Frage: Statuscode 413 (RequestEntityTooLarge) / Statuscode 415 (UnsupportedMediaType). WCF programmatisch

Frage erstellt am Sat, May 4, 2019 12:00 AM

Ich rufe einen WCF-Webdienst programmgesteuert auf, indem ich Klassendateien über SvcUtil.exe .

Alles funktioniert einwandfrei, aber wenn ich versuche, ein Bild zu senden (im wahrsten Sinne des Wortes eine Datei mit einer Größe von mehr als 200 KB), wird dieser Fehler angezeigt.

Ich weiß, dass ich maxReceivedMessageSize und maxBufferPoolSize auf das Maximum erhöhen muss, um große Dateien an den WCF-Dienst zu senden. Daher sieht die XML-Version dazu wie folgt aus:

<binding name="SampleBinding" allowCookies="true" messageEncoding="Mtom" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
  <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
  <security mode="None">
    <transport proxyCredentialType="Basic"/>
  </security>
</binding>

Da ich in dieser App von SvcUtil generierte Klassendateien verwende, muss ich meine WCF-Dienstmethode programmgesteuert aufrufen.

Das habe ich auch getan,

var binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = binding.MaxBufferPoolSize = long.MaxValue;
binding.AllowCookies = true;
binding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
binding.ReaderQuotas.MaxArrayLength = binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;

webAPI = new WebAPIClient(binding, new EndpointAddress(soapUrl));

Die XML-Version funktioniert sehr gut, aber die C # -Version ist mit dem folgenden Stack-Trace fehlgeschlagen:

  

Bei der Verarbeitung der Webanforderung ist ein Fehler aufgetreten: Statuscode   413 (RequestEntityTooLarge): Entität zu groß anfordern

BEARBEITEN

Ich wurde aufgefordert, eine benutzerdefinierte Bindung zu verwenden. Unten ist mein benutzerdefinierter Bindungscode:

CustomBinding binding = new CustomBinding()
{
    Name = "SampleBinding",
    ReceiveTimeout = new TimeSpan(0, 0, 10, 0, 0),
    SendTimeout = new TimeSpan(0, 0, 10, 0, 0),
};
var element1 = new TextMessageEncodingBindingElement()
{
    ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas()
    {
        MaxDepth = 2147483647,
        MaxStringContentLength = 2147483647,
        MaxArrayLength = 2147483647,
        MaxBytesPerRead = 2147483647,
        MaxNameTableCharCount = 2147483647
    }
};
var element2 = new HttpTransportBindingElement()
{
    ManualAddressing = false,
    MaxReceivedMessageSize = 2147483647,
    AllowCookies = false,
    AuthenticationScheme = System.Net.AuthenticationSchemes.None,
    BypassProxyOnLocal = false,
    MaxBufferSize = 2147483647,
    ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.None,
    TransferMode = TransferMode.Buffered,
    UseDefaultWebProxy = true
};
var element3 = new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, System.Text.Encoding.UTF8);

binding.Elements.Add(element1);
binding.Elements.Add(element2);
binding.Elements.Add(element3);

webAPI = new WebAPIClient(binding, new EndpointAddress(soapUrl));
  

Bei der Verarbeitung der Webanforderung ist ein Fehler aufgetreten: Statuscode   415 (UnsupportedMediaType): Die Nachricht kann nicht verarbeitet werden, da   Inhaltstyp 'application /soap + xml; charset = utf-8 'war nicht das   erwarteter Typ 'text /xml; Zeichensatz = utf-8 '.

Ich weiß nicht, was los ist. Kannst du mir helfen?

    
0
  1. Haben Sie die Mtom-Einstellung in Ihrer messageEncoding in der Codevariante absichtlich weggelassen oder war das ein Versehen?
    2019-05-04 07: 05: 55Z
  2. Nein, das war nicht beabsichtigt. Ich erwähnte allgemein
    2019-05-04 07: 20: 24Z
  3. Verwenden Sie anstelle von MessageVersion.Soap12WSAddressing10 MessageVersion.Soap11WSAddressing10, und verwenden Sie in Ihrer benutzerdefinierten Bindung die Mtom-Bindung: docs.microsoft.com/en-us/dotnet/api/… also: did you Legen Sie die requestLimits auf Ihrem Server fest: docs .microsoft.com /de-de /iis /configuration /system.webServer /…
    2019-05-05 08: 06: 50Z
  4. @ Rene, ausprobiert. keine Verwendung
    06.05.2019: 55: 37Z
1 Antworten                              1                         

Ich habe gerade eine Antwort gefunden und das Gleiche hier für zukünftige Nutzer gepostet, die möglicherweise dasselbe Problem haben wie ich:

Mein Kundenanruf

webAPI = new WebAPIClient(new BasicHttpBinding(), new EndpointAddress(_urlString);

Serverkonfiguration für den WCF-Dienst

<endpoint address="url/WebAPI.svc" binding="basicHttpBinding" contract="MyContract.IWebAPI" />

<bindings>
  <basicHttpBinding>
    <binding maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
      <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>

Wie Sie sehen, habe ich hier keinen Namen für die Bindungskonfiguration angegeben und es hat einfach wie ein Zauber funktioniert.

Antwort inspiriert von dieser SO-Antwort

    
0
2019-05-09 06: 43: 58Z
Quelle platziert Hier