Frage

Ich habe einen WCF-REST-Dienst in IIS gehostet .NET 4 RC verwenden. Die POST Anrufe an den Dienst verwenden JSON serialisiert. Alles funktioniert gut, bis die Größe eines des Datamember (string) länger als 8K. In diesem Fall erhalte ich den Fehler unter Angabe der MaxStringContentLength beschrieben wurde überschritten. Das maxStringContentLength Attribut für das endPoint wird erhöht, und es wird richtig aus der Konfigurationsdatei zu lesen.

Web config:

<services>
  <service name="MyServiceServer" >
    <endpoint address="http://localhost/MyService" kind="webHttpEndpoint" endpointConfiguration="serviceEndPoint" contract="IMyService">
    </endpoint>
  </service>
</services>

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="serviceEndPoint" maxReceivedMessageSize="2048000"  maxBufferSize="2048000" maxBufferPoolSize="0">
      <readerQuotas maxStringContentLength="2048000" maxArrayLength="2048000"  maxDepth ="65000"/>
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>

IMyService Schnittstelle ist wie folgt definiert:

public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/request", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    void MyMehod(<Class Type> obj);
}

Komplette Fehlermeldung lautet:

„Der Server hat einen Fehler bei der Verarbeitung der Anforderung. Die Ausnahmemeldung ist ‚Ein Fehler ist aufgetreten, das Objekt des Typs Deserialisieren. Die maximale Zeichenfolge Inhaltslänge Quote (8192) überschritten wurde, während XML-Daten zu lesen. Diese Quote kann durch Änderung der MaxStringContentLength Eigenschaft auf dem XmlDictionaryReaderQuotas erhöht werden verwendet, Objekt, wenn die XML-Leser zu schaffen. '. Siehe Serverprotokolle für weitere Details. Die Ausnahme-Stack-Trace ist: bei System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator Leser, Boolean verifyObjectName, DataContractResolver dataContractResolver) bei System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject (XmlDictionaryReader Leser, Boolean verifyObjectName) bei System.ServiceModel. Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest (Message Nachricht, Object [] Parameter) bei System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest (Message Nachricht, Object [] Parameter) bei System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest (Message Nachricht, Object [] Parameter) bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs (MessageRpc & Rpc) bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin (MessageRpc & Rpc) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5 (MessageRpc & RPC) bei System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31 (MessageRpc & FPA) bei System.ServiceModel.Dispatcher.MessageRpc.Process (Boolean isOperationContextSet)“

War es hilfreich?

Lösung

Das funktioniert, stellen Sie sicher, eine vollständige absolute URL als Endpunkt-Adresse haben. Wenn Sie schlau und versuchen, einen relativen Pfad zu verwenden, oder wenn Sie auslassen .SVC es mit den seltsamen Leser Quoten Fehlern bombardieren, sobald die Anforderung zu groß wird -

Ich würde, weil dies entweder unter einem Bug für WCF-Datei:

  1. relativer URLs nicht erlaubt werden soll (und eine entsprechende Ausnahme ausgelöst)

oder

  1. der Leser Quote sollte auch mit relativen Pfaden arbeiten

Andere Tipps

Einfügen in Ihre web.config:

<configuration>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingConfig">
          <readerQuotas maxStringContentLength="2048000" />
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

und Einsatz Attribut bindingConfiguration = "webHttpBindingConfig" in den Endpunkt

Ich hatte ähnliche Probleme, aber mit .NET 3.5

Ich hatte keine Probleme auf dem Server-Protokoll, so dass das Problem auf dem Client war. Es scheint, dass die Konfiguration mit dem Max-Wert erhöht wurde nicht gelesen und verwendete ...

gelöst Also habe ich den Namen des Endpunkts vorbei explizit im Konstruktor der WebChannelFactory, eine weitere Überlastung verwendet wird.

WS:

WebChannelFactory<IWKRestTest> factory = new WebChannelFactory<IWKRestTest>(new Uri(XXX));
factory.Credentials.UserName.UserName = K_USERNAME;
factory.Credentials.UserName.Password = K_PASSWORD;
IWKRestTest proxy = factory.CreateChannel();

IS:

WebChannelFactory<IWKRestTest> factory = new WebChannelFactory<IWKRestTest>("IWKRestTestService");

und in der app.config gibt es:

Der Uri wird in dem Endpunktknoten angegeben, aber es finden Sie auch die bindingConfiguration und so weiter, so dass alle neuen erhöhten Grenzen funktioniert jetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top