2009-07-16 29 views
7

Otrzymuję następujący błąd z mojej usługi WCF, która zwraca wyniki zapytania w obiektach C#.WCF - przekroczono maksymalny rozmiar wiadomości dla wiadomości przychodzących

Maksymalna kwota rozmiar wiadomości dla wiadomości przychodzących (131072) został został przekroczony

wiem jak rozwiązać ten problem poprzez MaxReceivedMessageSize Jakie szukam, aby dowiedzieć się, jak mogę znaleźć co przyczynia się do rozmiaru wiadomości. Nie wygląda mi na to, że może to być czysto dane, np. Jeśli dodaję 5 KB danych do ilości danych, które wycofuję z mojej usługi. Muszę zwiększyć MaxReceivedMessageSize o ponad 5 KB, aby rozwiązać problem.

Zastanawiam się również nad wszelkimi narzędziami do sprawdzania rozmiaru wiadomości w debugerze. Kiedy przechodzę przez mój kod do punktu, w którym wywoływana jest moja usługa WCF, nie mogę uzyskać informacji o rozmiarze wiadomości itp.

I wreszcie, jak przyciąć/zoptymalizować rozmiar wiadomości!

+0

Konfigura wymagana do ustawienia MaxReceivedMessageSize znajduje się tutaj: http://stackoverflow.com/questions/1573606/wcf-maxreceivedmessagesize-question –

Odpowiedz

0

Można użyć Serializera danych kontraktowych do serializowania wiadomości do strumienia danych, a następnie sprawdzić, ile jest równych bajtów.

+0

jakaś dobra próbka? W każdym razie, IMHO z pełnym szacunkiem sugeruje, brzmi jak ** WOMBAT **, gdy rozwiązanie jest ustawione na limit MaxReceivedMessageSize. Może debugowania celów. – Kiquenet

10

Czy możesz włączyć rejestrowanie? Jeśli uwzględnić te fragmenty do swojej konfiguracji usługi:

<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> 

Spowoduje to utworzenie pliku ServiceTrace.svclog w wybranym katalogu. Użyj przeglądarki śledzenia usługi WCF (znajdującej się w katalogu c:\program files\Microsoft SDKs\Windows\v6.0A\bin\), aby przeanalizować plik - wyświetli on dokładną zawartość wiadomości, a także uwzględni "długość treści" wiadomości, dzięki czemu zobaczysz, jak duża wiadomość jest.

+6

Gdzie mogę znaleźć informacje o długości treści, mam przeglądarkę śledzenia usług firmy Microsoft otwartą i jej nie widzę ... – manu08

+0

Nie widzę długości treści ani w przeglądarce śledzenia usług – stackoverflowuser

+0

Uwaga: przeglądarka jest "SvcTraceViewer.exe" –

Powiązane problemy