tracelistener - Trace WCF call from client -


i've built windows forms client application makes wcf call. i'd able display actual request , response, includeing soap header, , information post/get, within application. there way configure trace listener on client , consume within client, displaying contents in text box?

i've configured tracing outputs messages file. configuration on client application, it's logging calls making wcf service , response. sources have been added , each source xmltracelistener, handles writing xml log file. i'm looking utilize trace listener within client application , write textbox control.

<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 <system.servicemodel> element --> <diagnostics>     <messagelogging maxmessagestolog="10000"                     logentiremessage="true"                     logmessagesatservicelevel="true"                     logmalformedmessages="true"                     logmessagesattransportlevel="true">         <filters>            <clear/>         </filters>     </messagelogging> </diagnostics> 

so i've got message logging working, create own trace listener can write textbox:

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

now i've got trace listener, want try using windows forms client application.

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

at point, i'm still not seeing logging textbox control. i'm thinking listener not associated source, tried following:

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

after of this, messages not being logged textbox on form. being logged file via xmltracelistener, i'm assuming issue how i'm adding custom listener via system.diagnostics.trace.listeners.add(). correct approach?

this solution through app.config. let me know if prefer code-based solution.

in app.config, add listener list of shared listeners, listener message logging source. in 'listeners' list, name must match name later on in 'sharedlisteners' list. in 'sharedlisteners' list, 'type' must include full class name namespace, assembly name:

<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"/>       <add name="textboxlistener"/>     </listeners>   </source> </sources> <sharedlisteners>   <add name="xmltracelistener" type="system.diagnostics.xmlwritertracelistener" initializedata="clientlogbasic.svclog"/>   <add name="textboxlistener" type="wintransmitterclient.mytracelistener, wintransmitterclient" initializedata=""/> </sharedlisteners> <trace autoflush="true"/> 

because mytracelistener constructed framework, constructor must match base class. instead, make textbox property can set when needed.

in mytracelistener.cs:

public class mytracelistener : system.diagnostics.tracelistener {     public textbox txt_m     {         get;set;     }                public mytracelistener()         : base()     {}      // rest before ... 

in form1.cs, grab custom listener after client created, , set text box. no other code needed. entire form1.cs, excluding 'using' , 'namespace' lines:

public partial class form1 : form {     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.contactmanagertextserviceclient client = new servicereference1.contactmanagertextserviceclient();          // identifier in quotes must match name config file         mytracelistener mtl = source.listeners["textboxlistener"] mytracelistener;          // of course doesn't need done @ every button click, idea         mtl.txt_m = this.txtoutput;          string svalue = client.getdata(1234);      } } 

Comments

Popular posts from this blog

python - How to create a legend for 3D bar in matplotlib? -

java - Multi-Label Document Classification -

php - Dynamic url re-writing using htaccess -