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 .. .
Dlaczego 'maxMessagesToLog = "1"'? Czy to celowo? –
Tak, chciałem sprawdzić, czy WSZYSTKO w sekcji zaczęło obowiązywać i wygląda na to, że nie. –
lesscode