2009-07-16 13 views
7

Viene visualizzato il seguente errore dal servizio WCF che restituisce i risultati di una query in oggetti C#.WCF - È stata superata la quota massima delle dimensioni dei messaggi per i messaggi in arrivo

La quota massima dimensione del messaggio per i messaggi in arrivo (131072) è stato superato

so come risolvere questo tramite MaxReceivedMessageSize Quello che sto cercando di scoprire è come faccio a trovare fuori ciò che contribuisce alla dimensione del messaggio. Non mi sembra che possa essere puramente di dati, ad es. Se aggiungo 5Kb di dati alla quantità di dati che sto ritirando dal mio servizio. Devo aumentare MaxReceivedMessageSize di oltre 5 KB per risolvere l'errore.

Mi sto anche interrogando su qualsiasi strumento per esaminare la dimensione del messaggio nel debugger. Quando passo il mio codice al punto in cui viene chiamato il mio servizio WCF, non riesco a ottenere alcuna informazione sulla dimensione del messaggio, ecc.

E infine come tagliare/ottimizzare la dimensione del messaggio!

+0

La configurazione richiesta per impostare MaxReceivedMessageSize è qui: http://stackoverflow.com/questions/1573606/wcf-maxreceivedmessagesize-question –

risposta

0

È possibile utilizzare il serializzatore del contratto dati per serializzare il messaggio su un MemoryStream, quindi verificare quanti byte corrisponde.

+0

qualsiasi campione valido? Comunque, suggerisco rispettosamente IMHO, suona come ** WOMBAT ** quando la soluzione è impostata sulla quota MaxReceivedMessageSize. Forse a scopo di debug. – Kiquenet

10

È possibile attivare la registrazione? Se si includono questi frammenti nel vostro servizio di configurazione:

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

Questo creerà un file ServiceTrace.svclog nella directory scelta. Usa il Trace Viewer del servizio WCF (che si trova nella tua directory c:\program files\Microsoft SDKs\Windows\v6.0A\bin\) per analizzare il file - ti mostrerà il contenuto esatto dei messaggi e includerà anche la "lunghezza del contenuto" per il messaggio, così vedrai esattamente quanto grande il messaggio è

+6

Dove trovo le informazioni sulla "lunghezza del contenuto", ho aperto Microsoft Service Trace Viewer e non lo vedo ... – manu08

+0

Non riesco a vedere la lunghezza del contenuto nel visualizzatore di tracce di servizio – stackoverflowuser

+0

Nota: lo spettatore è "SvcTraceViewer.exe" –

Problemi correlati