4 Stimmen

Der entfernte Server hat eine unerwartete Antwort zurückgegeben: (400) Schlechte Anfrage

Ich erhalte keinen Fehler, wenn ich meine WCF-Service-Methoden aufrufe, außer in einem.

Diese spezielle Methode namens SaveTemplate() benötigt eine Eingabe von byte[].

Ich teste diese Methode mit einer Datei der Größe byte[806803], endet aber mit einem Fehler:

WCF - Der Remote-Server hat eine unerwartete Antwort zurückgegeben: (400) Bad Request.*

Ich bin mehrere Suchergebnisse durchgegangen, die ich auf Google gefunden habe, und habe einige Änderungen in der app.config entsprechend vorgenommen, aber der Fehler tritt immer noch auf :-(

Hier ist die App.Config-Datei meiner WCF Service Library:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttp" maxReceivedMessageSize="50000000" maxBufferPoolSize="50000000"
        messageEncoding="Mtom" >
          <readerQuotas maxDepth="500000000" maxStringContentLength="500000000" maxArrayLength="500000000"
          maxBytesPerRead="500000000" maxNameTableCharCount="500000000" />
          <security mode="None"></security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <services>
      <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
        name="ReportingComponentLibrary.TemplateService">
        <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateService" bindingConfiguration="wsHttp" >
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" ></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateService/" />
          </baseAddresses>
        </host>
      </service>

      <service behaviorConfiguration="ReportingComponentLibrary.TemplateServiceBehavior"
        name="ReportingComponentLibrary.TemplateReportService">
        <endpoint address="" binding="wsHttpBinding" contract="ReportingComponentLibrary.ITemplateReportService" bindingConfiguration="wsHttp" >
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/ReportingComponentLibrary/TemplateReportService/" />
          </baseAddresses>
        </host>
      </service>

    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ReportingComponentLibrary.TemplateServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

0 Stimmen

Können Sie bitte einen vollständigen Stack-Trace posten?

5voto

Drew Marsh Punkte 32833

Da Sie anscheinend innerhalb von ASP.NET in IIS hosten, müssen Sie sicherstellen, dass die Anfragelänge, die ASP.NET zulässt, auch zusätzlich zu den verschiedenen WCF-Einstellungen festgelegt ist. Für ASP.NET lautet die Einstellung, nach der Sie suchen maxRequestLength en el httpRuntime Element . Der Standardwert für diese Einstellung beträgt nur 4 MB, was erklären würde, warum Sie auf ein Problem stoßen.

Bei einer maximalen Länge von 512 MB würde das in etwa so aussehen:

<system.web>
    <httpRuntime maxRequestLength="524288" />

    <!-- rest of your config here -->
</system.web>

0voto

inutan Punkte 10098

Vielen Dank für alle Hilfe!

Es war meine Unwissenheit, die dazu führte, dass ich so viel Zeit brauchte, um das Problem zu lösen.

Ich hatte es versäumt, die Konfigurationsdatei meines Windows-Dienstes mit der neuen Binding-Konfiguration zu aktualisieren. Stattdessen habe ich einfach eine separate Konfigurationsdatei in das Windows Service-Verzeichnis kopiert.

0voto

vpcastelo Punkte 1

Meine 50 Cent: Ändern Sie den Wert des Attributs maxRequestLength des Elements httpRuntime von 65536 auf 2147483647.

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