2009-07-16 6 views
7

Ich erhalte den folgenden Fehler von meinem WCF-Dienst, der die Ergebnisse einer Abfrage in C# -Objekten zurückgibt.WCF - Das maximale Nachrichtengrößenkontingent für eingehende Nachrichten wurde überschritten

Die maximale Nachrichtengröße Quote für eingehende Nachrichten (131072) hat

Ich weiß überschritten wurde, wie dies über MaxReceivedMessageSize zu lösen Was ich suche, um herauszufinden, ist, wie finde ich heraus, was zur Nachrichtengröße beiträgt. Es sieht für mich nicht so aus, als ob es rein Daten sein könnte, z.B. Wenn ich 5Kb Daten zu der Datenmenge hinzufüge, ziehe ich von meinem Dienst zurück. Ich muss MaxReceivedMessageSize um mehr als 5 KB erhöhen, um den Fehler zu beheben.

Ich frage mich auch über alle Tools, um die Nachrichtengröße im Debugger zu betrachten. Wenn ich durch meinen Code zu dem Punkt gehe, wo mein WCF-Service angerufen wird, kann ich anscheinend keine Informationen über die Nachrichtengröße usw. bekommen

Und schließlich, wie man die Nachrichtengröße trimmt/optimiert!

+0

Die erforderliche Konfiguration zum Einstellen der MaxReceivedMessageSize ist hier: http://StackOverflow.com/Questions/1573606/WCF-MaxreceivedMessagesize-Question –

Antwort

0

Sie können den Data Contract Serializer verwenden, um die Nachricht in einem MemoryStream zu serialisieren, und dann prüfen, wie viele Bytes sich ergeben.

+0

ein gutes Beispiel? Wie auch immer, IMHO schlägt respektvoll vor, klingt wie ** WOMBAT **, wenn die Lösung das MaxReceivedMessageSize-Kontingent setzt. Vielleicht Debugging-Zwecke. – Kiquenet

10

Können Sie die Protokollierung einschalten? Wenn Sie diese Schnipsel in die Dienstkonfiguration umfassen:

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing" > 
     <listeners> 
     <add name="xmlTrace" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\Traces\ServiceTrace.svclog" /> 
     </listeners> 
    </source> 
    </sources> 
    <trace autoflush="true" /> 
</system.diagnostics> 

<system.serviceModel> 
    <diagnostics> 
    <messageLogging 
     logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" 
     logMalformedMessages="true" logEntireMessage="true" 
     maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" /> 
    </diagnostics> 
</system.serviceModel> 

Dies wird eine Datei ServiceTrace.svclog im Verzeichnis erstellen Sie gewählt haben. Verwenden Sie den WCF-Dienst-Trace-Viewer (in Ihrem Verzeichnis c:\program files\Microsoft SDKs\Windows\v6.0A\bin\), um die Datei zu analysieren - sie zeigt Ihnen den genauen Inhalt der Nachrichten und enthält auch die "Inhaltslänge" für die Nachricht, so dass Sie genau sehen, wie groß Die Nachricht ist.

+6

Wo finde ich die "content-length" Informationen, ich habe den Microsoft Service Trace Viewer geöffnet und nicht sehen ... – manu08

+0

Ich kann nicht sehen, Content-Länge entweder in Service-Trace-Viewer – stackoverflowuser

+0

Hinweis: der Betrachter ist "SvcTraceViewer.exe" –

Verwandte Themen