Trace WCF call from client

前端 未结 3 1214
刺人心
刺人心 2020-12-12 05:07

I\'ve built a windows forms client application which makes a WCF call. I\'d like to be able to display the actual request and response, includeing SOAP header, and informat

3条回答
  •  -上瘾入骨i
    2020-12-12 05:17

    This solution is mostly through app.config. Let me know if you prefer a code-based solution.

    In app.config, add your listener to the list of shared listeners, as well as a listener for the message logging source. In 'listeners' list, the name must match the name later on in the 'sharedListeners' list. In 'sharedListeners' list, the 'type' must include full class name with namespace, as well as assembly name:

    
    
      
        
          
        
      
      
        
          
          
        
      
    
    
      
      
    
    
    

    Because MyTraceListener will be constructed by the framework, its constructor must match the base class. So instead, make the textbox a property that can be set when needed.

    In MyTraceListener.cs:

    public class MyTraceListener : System.Diagnostics.TraceListener
    {
        public TextBox txt_m
        {
            get;set;
        }          
    
        public MyTraceListener()
            : base()
        {}
    
        // rest as before ...
    

    In Form1.cs, grab the custom listener after the client is created, and set the text box. No other code is needed. This is the entire Form1.cs, excluding 'using' and '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 from config file
            MyTraceListener mtl = source.Listeners["textBoxListener"] as MyTraceListener;
    
            // of course this doesn't need to be done at every button click, but you get the idea
            mtl.txt_m = this.txtOutput;
    
            string sValue = client.GetData(1234);
    
        }
    }
    

提交回复
热议问题