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

发表于:2012-02-09来源:博客园作者:Artech点击数: 标签:REST服务实例
14: HttpStatusCode.NotFound; 15: } 16: return employee; 17: } 18: 19: public void Create(Employee employee) 20: { 21: employees.Add(employee); 22: } 23: 24: public void Update(Employee employee) 25: {

  14: HttpStatusCode.NotFound;

  15: }

  16: return employee;

  17: }

  18:

  19: public void Create(Employee employee)

  20: {

  21: employees.Add(employee);

  22: }

  23:

  24: public void Update(Employee employee)

  25: {

  26: this.Delete(employee.Id);

  27: employees.Add(employee);

  28: }

  29:

  30: public void Delete(string id)

  31: {

  32: Employee employee = this.Get(id);

  33: if (null != employee)

  34: {

  35: employees.Remove(employee);

  36: }

  37: }

  38:

  39: public IEnumerable GetAll()

  40: {

  41: return employees;

  42: }

  43: }

  值得一提的是,不论是用于获取某个指定ID的员工信息的Get方法,还是用于修改和删除员工记录的Update和Delete方法,当指定ID的员工不存在时都通过WebOperationContext表示当前Web操作上下文的对象将回复状态设置为NotFound(即404 Not Found),这体现了我们的服务是基于Web的。

  接下来我们通过自我寄宿的方式对上面定义的EmployeesService服务进行寄宿,下面是相应的配置。我们为寄宿的服务添加了唯一一个终结点,并简单地指定了其ABC三要素。和我们之前配置的终结点不同的是,在这里我们采用的绑定类型为WebHttpBinding。

  1:

  2:

  3:

  4:

  5:

  6: binding="webHttpBinding"

  7: contract="Artech.WcfServices.Service.Interface.IEmployees"/>

  8:

 

  9:

  10:

  11:

  最终我们通过如下的程序进行服务的寄宿。之前我们总是使用基于服务类型创建的ServiceHost进行服务寄宿,在这里我们使用的是ServiceHost它的子类WebServiceHost。

  1: using (WebServiceHost host = new WebServiceHost(typeof(EmployeesService)))

  2: {

  3: host.Open();

  4: Console.Read();

  5: }

  三、进行服务调用

  由于我们寄宿的服务完全是基于Web的,所以和普通的Web站点没有本质的区别。由于EmployeesService服务的GetAll和Get操作支持HTTP-GET请求,所以我们完全可以在浏览器中针对操作的地址发起请求,而返回的数据可以直接显示在浏览器上。下图所示的是通过浏览器调用GetAll操作(http://127.0.0.1:3721/employees/all)得到的结果,我们可以看到所有员工的列表以XML的形式返回。

image

  我们也可以通过浏览器调用Get操作并直接通过在地址中指定员工的ID(http://127.0.0.1:3721/employees/001)并得到以XML表示的基于相应员工的信息。下图所示XML正式ID为001的Employee对象序列化后的结果。如果在请求地址中指定一个不存在的ID(比如http://127.0.0.1:3721/employees/003),由于Get方法中指定了回复状态为NotFound,我们会得到类似于访问资源不存在的错误信息,就像访问一个不存在的Web页面一样。

image

  上面我们演示了通过浏览器以HTTP-GET方式请求操作地址的方式从而直接将返回结果呈现出来,现在我们来演示如何使用通过ChannelFactory创建的服务代理进行服务调用。我们首先在作为客户端应用程序的Client项目中创建一个App.config,并定义如下的配置。

  1:

  2:

  3:

  4:

  5:

  6:

  7:

  8:

  9:

  10:

  11:

  12: address="http://127.0.0.1:3721/employees"

  13: behaviorConfiguration="webBehavior"

  14: binding="webHttpBinding"

  15: contract="Artech.WcfServices.Service.Interface.IEmployees"/>

  16:

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