2012-06-29 21 views
8

Próbuję zdiagnozować usługę WCF, która jest hostowana we względnie prosty proces hosta usługi (Service.exe).WCF: Jak prześledzić treść wiadomości?

Mam Service.exe.config skonfigurowany tak:

<?xml version="1.0" ?> 
<configuration> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="All" 
       propagateActivity="true"> 
     <listeners> 
      <add name="traceListener" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData= "c:\temp\Service.svclog" /> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics> 
    <system.serviceModel> 
    <diagnostics> 
     <messageLogging maxMessagesToLog="1" 
         maxSizeOfMessageToLog="2147483647" 
         logEntireMessage="true" 
         logMessagesAtServiceLevel="true" 
         logMalformedMessages="true" 
         logMessagesAtTransportLevel="true"> 
     </messageLogging> 
    </diagnostics> 
    </system.serviceModel> 
    <startup> 
    <supportedRuntime version="v4.0" 
         sku=".NETFramework,Version=v4.0" /> 
    </startup> 
</configuration> 

Kiedy patrzę na wynikowym pliku svclog, widzę wiele wydarzeń śladowe są rejestrowane (spodziewałem się tylko pierwsza wiadomość, musisz być zalogowany) oraz żaden śledzony komunikat nie wyświetla treści wiadomości (tylko nagłówki).

Na pewno brakuje mi czegoś prostego, ale nie widzę tego.

AKTUALIZACJA: Kiedy patrzę na edytor konfiguracji WCF, w sekcji "Diagnostyka" znajdują się dwie sekcje: MessageLogging i Tracing. Kiedy klikam odnośnik „EnableMessageLogging”, mój plik konfiguracyjny zostanie zaktualizowany:

<system.diagnostics> 
    <sources> 
     <source propagateActivity="true" name="System.ServiceModel" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add initializeData="c:\temp\MessageBodyTracing.svclog" type="System.Diagnostics.XmlWriterTraceListener" 
      name="traceListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="ServiceModelMessageLoggingListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="c:\users\me\documents\visual studio 2010\projects\messagebodytracing\messagebodytracing\app_messages.svclog" 
     type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp"> 
     <filter type="" /> 
     </add> 
    </sharedListeners> 
    </system.diagnostics> 

Chyba źródło nazwane System.ServiceModel.MessageLogging jest kluczem - Nie widziałem, że w każdej dokumentacji śledzenie wiadomości .. .

+0

Dlaczego 'maxMessagesToLog = "1"'? Czy to celowo? –

+0

Tak, chciałem sprawdzić, czy WSZYSTKO w sekcji zaczęło obowiązywać i wygląda na to, że nie. – lesscode

Odpowiedz

6

próby dodania:

<endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" /> 

w węźle diagnostics pod messageLogging.

+0

Nie pomogło. Próbowałem nawet tego z usługą "Hello World", którą otrzymujesz podczas tworzenia nowego projektu biblioteki usług WCF, i nie dostaję tam także ciał komunikatów. Zmieszany. – lesscode

+0

Czy próbowałeś użyć edytora konfiguracji WCF z VS i zobaczyć, co jest wygenerowane dla Twojej usługi .config? –

+0

Ah, tak. Zobacz zaktualizowane pytanie – lesscode

3

Ustaw LogEntireMessage true pod diagnostyką> MessageLogging w służbie Edytor konfiguracji

+4

Dzięki temu po prostu pokazuje się "... strumień ..." w przeglądarce –

+1

@Joe Phillips TransferMode jest ustawiony na przesyłanie strumieniowe. Śledzenie działa tylko przy ustawianiu TransferMode na Buffered! Musisz zmienić konfigurację. –