[WCF REST] 一个简单的REST服务实例(3)

发表于:2012-02-09来源:博客园作者:Artech点击数: 标签:REST服务实例
17: 18: 如上面的配置片断所示,我们定义了一个与服务端相匹配的客户端终结点,该终结点上应用了一个WebHttpBehavior终结点行为。WebHttpBehavior可以说是整个

 

  17:

  18:

  如上面的配置片断所示,我们定义了一个与服务端相匹配的客户端终结点,该终结点上应用了一个WebHttpBehavior终结点行为。WebHttpBehavior可以说是整个Web HTTP编程模型的核心,绝大部分针对Web的支持都是通过该行为实现的。实际上服务端终结点通过WebServiceHost应用了这个终结点行为。

  1: using(ChannelFactory channelFactory = new ChannelFactory("employeeService"))

  2: {

  3: IEmployees proxy = channelFactory.CreateChannel();

  4:

  5: Console.WriteLine("所有员工列表:");

  6: Array.ForEach(proxy.GetAll().ToArray(),employee=>Console.WriteLine(employee));

  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(proxy.GetAll().ToArray(),employee => Console.WriteLine(employee));

  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(proxy.GetAll().ToArray(), employee => Console.WriteLine(employee));

  27: Console.WriteLine("\n删除员工(003)信息:");

  28:

  29: proxy.Delete("003");

  30: Array.ForEach(proxy.GetAll().ToArray(), employee => Console.WriteLine(employee));

  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: 销售部G11003王五

  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: 行政部G9003王五

  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

原文转自:http://www.ltesting.net