博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用WCF的Trace与Message Log功能
阅读量:6830 次
发布时间:2019-06-26

本文共 8054 字,大约阅读时间需要 26 分钟。

 

原创地址:

转载请注明出处

 

前面介绍过如何创建一个WCF Service ,本文介绍一下如何开启与查看WCF的Message Log和Trace Log。

 

(一)使用WCF Service Configuration Editor开启Trace与Message Log功能

如果安装了Visual Studio,我们可以使用WCF Service Configuration Editor来开启WCF的Trace和Message Log的功能。Trace和Log既可以在客户端做,也可以在服务器端做。

 

有两种方式可以打开WCF Service Configuration Editor

(1)Visual Studio Tools –> WCF Service Configuration Editor:

 

(2)直接在Solution Explorer中右键点击app.config –> Edit WCF Configuration:

 

打开WCF Service Configuration Editor后,我们需要点击

  • Enable Log Auto-Flush
  • Enable MessageLogging
  • Enable Tracing

 

还要将LogEntireMessage改为True:

 

保存配置文件,可以看到文件夹中多了两个文件,一个是message log文件,另一个是trace log文件:

 

 

(二)调用WCF Service

演示的解决方案如下:

 

Employee.cs:

namespace HelloService{    [DataContract(Namespace="http://jfzhu.com/2014/10/16/Employee")]    public class Employee    {        private int id;        private string name;        private DateTime birthdate;        [DataMember(Name="Id", Order=1)]        public int Id        {            get { return id; }            set { id = value; }        }        [DataMember(Order = 2)]        public string Name        {            get { return name; }            set { name = value; }        }        [DataMember(Order = 3)]        public DateTime Birthdate        {            get { return birthdate; }            set { birthdate = value; }        }    }}

 

IHelloService.cs

namespace HelloService{        [ServiceContract(Name = "IHelloService")]    public interface IHelloService    {        [OperationContract(Name="GetMessage")]        string GetMessage(string name);        [OperationContract]        Employee GetEmployee(int id);    }}

 

HelloService.cs

namespace HelloService{        public class HelloService : IHelloService    {        public string GetMessage(string name)        {            return "Hello " + name;        }        public Employee GetEmployee(int id)        {            return new Employee() { Id = id, Name="Neil Klugman", Birthdate=new DateTime(1930, 1, 31)};        }    }}

 

Host的web.config

Client的Form1.cs

namespace WindowsClient{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void buttonGetMessage_Click(object sender, EventArgs e)        {            HelloService.HelloServiceClient client = new HelloService.HelloServiceClient();            labelGetMessage.Text = client.GetMessage(textBoxGetMessage.Text);        }        private void buttonGetEmployee_Click(object sender, EventArgs e)        {            HelloService.HelloServiceClient client = new HelloService.HelloServiceClient();            HelloService.Employee employee = client.GetEmployee(Convert.ToInt32(textBoxGetEmployee.Text));            labelId.Text = "Id: " + employee.Id.ToString();            labelName.Text = "Name: " + employee.Name;            labelBirthdate.Text = "Birthdate: " + employee.Birthdate.ToString("yyyy-MM-dd");        }    }}

 

Client的app.config

 

可以看到整个<system.diagnostics>部分都是用来配置Message Log和Trace Log的。

运行客户端,分别点击GetMessage按钮和GetEmployee按钮,调用两个WCF Service。

 

 

(三)使用Microsoft Service Trace Viewer查看Message Log

使用Microsoft Service Trace Viewer来看Message Log文件app_messages.svclog(除了直接双击文件可以打开查看之外,也可以在VS Command Prompt上键入命令 SVCTRACEVIWER)。

因为调用了两次WCF Service,所以在左边面板看到两个Activity。

右边面板上面的第一条记录是Request,第二条记录是Reponse。

 

GetMessage的request

 

 

http://tempuri.org/IHelloService/GetMessage
http://192.168.6.47:8080/HelloService.svc/HelloService
POST
uIDPo0e70YqoeAJIhBNYwyqk3TgAAAAAdUnEReYNIkKGPM4fV5qHKsd96tBerBNIg+gFdw79jjIACQAA
271f2185-f90c-43b2-9086-ba9b8e0b3bd8
JF

 

GetMessage的response

 

OK
OK
Accept-Encoding
145
text/xml; charset=utf-8
Thu, 16 Oct 2014 14:37:35 GMT
Microsoft-IIS/8.0
ASP.NET
Hello JF

 

GetEmployee的request

 

 

http://tempuri.org/IHelloService/GetEmployee
http://192.168.6.47:8080/HelloService.svc/HelloService
POST
uIDPo0i70YqoeAJIhBNYwyqk3TgAAAAAdUnEReYNIkKGPM4fV5qHKsd96tBerBNIg+gFdw79jjIACQAA
0fa3ee85-87fc-4a76-8047-965b049882c6
1

 

GetEmployee的response

 

 

OK
OK
Accept-Encoding
247
text/xml; charset=utf-8
Thu, 16 Oct 2014 14:37:38 GMT
Microsoft-IIS/8.0
ASP.NET
1
Neil Klugman
1930-01-31T00:00:00

 

(四)使用Fiddler来查看Message Log

如果使用Fiddler来查看Message Log的话,就不需要使用WCF Service Configuration Editor开启Log功能了。下图Fiddler中左边面板的两条记录分表表示两次WCF Service的调用。

右边面板上半部分表示request,下半部分表示response,基本和Microsoft Service Trace Viewer的布局差不多。

 

 

GetMessage的调用:

 

 

 

request:

7b920c1f-51b6-4ee0-9e32-e2f01fcd2e4c
JF

 

response:

Hello JF

 

GetEmployee的调用:

 

 

 

request:

2968a624-c51a-4247-a4ce-73e0548585fd
1

 

 

response:

1
Neil Klugman
1930-01-31T00:00:00

 

 

(五)总结

  • Visual Studio提供了自己的Message Log和Trace Log的功能,本文主要演示了如何开启他们,以及如何查看Message Log。
  • 开启这些功能可以使用WCF Service Configuration Editor。
  • 查看这些Log可以使用Microsoft Service Trace Viewer。
  • Logging功能可以在客户端做也可以在服务器端做。
  • 不使用微软提供的工具,使用Fiddler也可以监控到调用WCF Service时发送和收到的消息。
你可能感兴趣的文章
Java继承中成员方法的overload(重载/过载)
查看>>
C#的Timer
查看>>
性能测试工具Locust
查看>>
The POM for XXX:jar:${com.ld.base.service.version} is missing, no dependency information available
查看>>
线程管理:守护线程的创建和运行
查看>>
iOS时间问题
查看>>
关于高可用的系统
查看>>
systemtap-note-6-userspace-stack-backtrace
查看>>
netty支持的各种socketchannel实现及比较
查看>>
配置文件操作(获取路径、及取得相应数据)
查看>>
HDU 3944 DP? [Lucas定理 诡异的预处理]
查看>>
[maven] settings 文件 国内镜像站
查看>>
[LeetCode] Encode and Decode TinyURL 编码和解码精简URL地址
查看>>
[转]关于OpenGL的绘制上下文
查看>>
MySQL索引及查询优化总结
查看>>
获取iOS系统版本号,慎重使用[[[UIDevice currentDevice] systemVersion] floatValue]——【sdk缺陷】...
查看>>
秀尔算法:破解RSA加密的“不灭神话” --zz
查看>>
Redis学习之路(003)- hiredis安装及测试
查看>>
【剑指offer】近期公共祖先
查看>>
剑指offer 38 数字在排序数组中出现的次数
查看>>