2015-09-16 3 views
0

Я регистрирую сообщения для веб-службы WCF, используя System.DiagnosticsSystem.ServiceModel.MessageLogging с конфигурацией ниже. И я протянул TraceListener класс как:Регистрация журнала диагностики WCF с уникальным идентификатором

public class FormattedTraceListener : TraceListener 
    { 
     static readonly Logger logger = new Logger(); 

     public FormattedTraceListener() 
      : base(string.Empty) 
     { 
     } 

     public override void TraceData(TraceEventCache eventCache,String source,TraceEventType eventType,**Int32 id,**Object data) 
     { 
//.... 
<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" > 
     <listeners> 
      <add name="pretty" /> 
      <remove name="Default"/> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="pretty" lockItem="true" type="LoggingTest.FormattedXmlWriterTraceListener,LoggingTest" /> 
    </sharedListeners> 
    <trace autoflush="true" indentsize="4"> 
    </trace> 
</system.diagnostics> 

.... 

<diagnostics > 
     <messageLogging 
        logEntireMessage="true" 
        logMalformedMessages="false" 
        logMessagesAtServiceLevel="true" 
        logMessagesAtTransportLevel="false" 
        maxMessagesToLog="-1" 
        maxSizeOfMessageToLog="134217728"> 
     <filters > 
      <add xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">/s:Envelope</add> 
      <add xmlns:s="http://www.w3.org/2003/05/soap-envelope">/s:Envelope</add> 
     </filters> 
     </messageLogging> 
     <endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true" /> 
    </diagnostics> 
</system.serviceModel> 

TraceData метод дважды выстрелил (для запроса и ответа) для каждого вызова службы. Однако при ударе метода параметр id всегда равен 0.

Мне нужен уникальный идентификатор при вводе текста в журнал запросов и ответов. Как я могу это указать?

ответ

0

Ваш подход неправильный. Поле TraceData (int id) не является уникальным идентификатором для запроса WCF. Это код приложения для типа события.

Просто используйте стандартные классы трасс WCF и view correlated traces. Если я понимаю, что вы пытаетесь выполнить при сопоставлении запроса на ответ, поведение по умолчанию уже соответствует вашим требованиям.

Смежные вопросы