Śledź wywołanie WCF od klienta

Zbudowałem aplikację kliencką formularzy systemu Windows, która wywołuje WCF. Chciałbym móc wyświetlać rzeczywiste żądanie i odpowiedź, w tym nagłówek SOAP, oraz informacje o POST / Get, z poziomu aplikacji. Czy istnieje sposób na skonfigurowanie detektora śledzenia na kliencie i wykorzystanie go w kliencie, wyświetlając zawartość w polu tekstowym?

Skonfigurowałem śledzenie, które wysyła komunikaty do pliku. Ta konfiguracja jest na mojej aplikacji klienckiej, więc rejestruje wszystkie wywołania, które wykonuje w usłudze wcf i odpowiedzi. Źródła zostały dodane i dla każdego źródła jest XmlTraceListener, który obsługuje zapisywanie do pliku dziennika XML. To, czego teraz chcę, to wykorzystanie detektora śledzenia z poziomu aplikacji klienckiej i zapisanie go do kontrolki pola tekstowego.

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel" 
                switchValue="All">
            <listeners>
                <add name="xmlTraceListener" />
            </listeners>
        </source>
        <source name="System.ServiceModel.MessageLogging" 
                switchValue="All">
             <listeners>
                 <add name="xmlTraceListener" />
             </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add name="xmlTraceListener" 
             type="System.Diagnostics.XmlWriterTraceListener" 
             initializeData="ClientLogBasic.svclog" />
    </sharedListeners>
    <trace autoflush="true" />
</system.diagnostics>

<!-- child of the <system.serviceModel> element -->
<diagnostics>
    <messageLogging maxMessagesToLog="10000"
                    logEntireMessage="true"
                    logMessagesAtServiceLevel="true"
                    logMalformedMessages="true"
                    logMessagesAtTransportLevel="true">
        <filters>
           <clear/>
        </filters>
    </messageLogging>
</diagnostics>

Teraz, gdy mam już rejestrowanie wiadomości, tworzę własny detektor śledzenia, który może pisać do pola tekstowego:

public class MyTraceListender : System.Diagnostics.TraceListener
{
    private TextBox txt_m;
    public MyTraceListender(TextBox txt)
        : base()
    {
        txt_m = txt;
    }

    private delegate void delWrite(string sText);

    public override void Write(string message)
    {
        txt_m.Invoke(new delWrite(AsyncWrite), message);
    }

    public override void WriteLine(string message)
    {
        this.Write(message + System.Environment.NewLine);
    }

    private void AsyncWrite(string sMessage)
    {
        this.txt_m.AppendText(sMessage);
    }
}

Teraz, gdy mam już odbiorcę śledzenia, chcę spróbować użyć go z mojej aplikacji klienckiej formularzy systemu Windows.

public partial class Form1 : Form
{
    private MyTraceListender listener_m;

    public Form1()
    {
        InitializeComponent();

        listener_m = new MyTraceListender(this.txtOutput);

        System.Diagnostics.Trace.Listeners.Add(listener_m);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        string sValue = client.GetData(1234);
    }
}

W tym momencie nadal nie widzę logowania do kontrolki pola tekstowego. Myślę, że słuchacz nie jest powiązany ze źródłem, więc spróbowałem:

public partial class Form1 : Form
{
    private MyTraceListender listener_m;

    public static System.Diagnostics.TraceSource source = new System.Diagnostics.TraceSource("System.ServiceModel.MessageLogging", System.Diagnostics.SourceLevels.All);

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        string sValue = client.GetData(1234);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        listener_m = new MyTraceListender("test", this.txtOutput);
        source.Listeners.Add(listener_m);
    }
}

Po tym wszystkim wiadomości nie są rejestrowane w polu tekstowym formularza. Są one rejestrowane w pliku za pośrednictwem XmlTraceListener, więc zakładam, że problem polega na tym, jak dodam mój własny odbiornik za pośrednictwem System.Diagnostics.Trace.Listeners.Add (). Czy to właściwe podejście?

questionAnswers(3)

yourAnswerToTheQuestion