Rastrear la llamada WCF desde el cliente

He construido una aplicación de cliente de formularios de Windows que hace una llamada WCF. Me gustaría poder mostrar la solicitud y la respuesta reales, incluyendo el encabezado SOAP e información sobre el POST / Get, desde la aplicación. ¿Hay alguna forma de configurar un agente de escucha de seguimiento en el cliente y consumirlo desde dentro del cliente, mostrando el contenido en un cuadro de texto?

He configurado el seguimiento que envía mensajes a un archivo. Esta configuración está en mi aplicación cliente, por lo que está registrando todas las llamadas que está realizando al servicio wcf y la respuesta. Así que las fuentes se han agregado y para cada fuente hay un XmlTraceListener, que maneja la escritura en un archivo de registro xml. Lo que estoy buscando hacer ahora es utilizar un detector de seguimiento desde la propia aplicación cliente y escribir en un control de cuadro de texto.

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

Así que ahora que tengo el registro de mensajes funcionando, creo mi propio detector de seguimiento que puede escribir en un cuadro de texto:

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);
    }
}

Ahora que tengo mi detector de seguimiento, quiero intentar usarlo desde la aplicación cliente de Windows Forms.

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);
    }
}

En este momento, todavía no veo el inicio de sesión en el control de cuadro de texto. Estoy pensando que el oyente no está asociado a la fuente, así que intenté lo siguiente:

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);
    }
}

Después de todo esto, los mensajes no se registran en el cuadro de texto del formulario. Se están registrando en el archivo a través de XmlTraceListener, así que asumo que el problema es cómo estoy agregando mi escucha personalizada a través de System.Diagnostics.Trace.Listeners.Add (). ¿Es este el enfoque correcto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta