17:
18:
如上面的配置片断所示,我们定义了一个与服务端相匹配的客户端终结点,该终结点上应用了一个WebHttpBehavior终结点行为。WebHttpBehavior可以说是整个Web HTTP编程模型的核心,绝大部分针对Web的支持都是通过该行为实现的。实际上服务端终结点通过WebServiceHost应用了这个终结点行为。
1: using(ChannelFactory
2: {
3: IEmployees proxy = channelFactory.CreateChannel();
4:
5: Console.WriteLine("所有员工列表:");
6: Array.ForEach
7:
8: Console.WriteLine("\n添加一个新员工(003):");
9: proxy.Create(new Employee
10: {
11: Id = "003",
12: Name = "王五",
13: Grade = "G9",
14: Department = "行政部"
15: });
16: Array.ForEach
17:
18: Console.WriteLine("\n修改员工(003)信息:");
19: proxy.Update(new Employee
20: {
21: Id = "003",
22: Name = "王五",
23: Grade = "G11",
24: Department = "销售部"
25: });
26: Array.ForEach
27: Console.WriteLine("\n删除员工(003)信息:");
28:
29: proxy.Delete("003");
30: Array.ForEach
31: }
服务调用程序如上所示,我们模拟了员工的添加、修改和删除。程序之后会在客户端控制台产生如下的输出。
所有员工列表:
1: 所有员工列表:
2: ID: 001 姓名: 张三 级别: G7 部门: 开发部
3: ID: 002 姓名: 李四 级别: G6 部门: 人事部
4:
5: 添加一个新员工(003):
6: ID: 001 姓名: 张三 级别: G7 部门: 开发部
7: ID: 002 姓名: 李四 级别: G6 部门: 人事部
8: ID: 003 姓名: 王五 级别: G9 部门: 行政部
9:
10: 修改员工(003)信息:
11: ID: 001 姓名: 张三 级别: G7 部门: 开发部
12: ID: 002 姓名: 李四 级别: G6 部门: 人事部
13: ID: 003 姓名: 王五 级别: G11 部门: 销售部
14:
15: 删除员工(003)信息:
16: ID: 001 姓名: 张三 级别: G7 部门: 开发部
17: ID: 002 姓名: 李四 级别: G6 部门: 人事部
从编程角度来看,我们采用与SOAP服务完全一样的服务调用方式,那么如何反映出服务调用基于Web的本质呢?首先,之前我们能够通过浏览器访问GetAll和Get两个操作可以证明这两个服务操作是基于HTTP-GET的,返回的数据直接以单纯的XML返回,并没有封装成SOAP。为了证明Create、Update和Delete也是完全基于Web的,我们可以通过Fiddler来分析HTTP请求的内容。
如下所示的三段XML片断分别对应着针对上述三个服务操作调用的HTTP请求消息,从这我们可以看出它们就是单纯的针对PUT、POST和DELETE方法的HTTP请求,而传输给服务端的数据直接作为消息的主体,并没有封装成SOAP消息。
1: Create:
2: PUT http://jinnan-pc:3721/employees/ HTTP/1.1
3: Content-Type: application/xml; charset=utf-8
4: Host: jinnan-pc:3721
5: Content-Length: 187
6: Expect: 100-continue
7: Accept-Encoding: gzip, deflate
8:
9:
10:
11: Update:
12: POST http://jinnan-pc:3721/employees/ HTTP/1.1
13: Content-Type: application/xml; charset=utf-8
14: Host: jinnan-pc:3721
15: Content-Length: 186
16: Expect: 100-continue
17: Accept-Encoding: gzip, deflate
18:
19:
20:
21: Delete:
22: DELETE http://jinnan-pc:3721/employees/003 HTTP/1.1
23: Content-Type: application/xml; charset=utf-8
24: Host: jinnan-pc:3721