使用WCF的Web编程模型开发REST风格的Web Service

WCF中的Web编程模型提供了一种以REST风格来设计Web Service的功能,它不同于以往基于SOAP或者WS-*规范的Web Service,而是以URI和http协议为中心的。对于操作的每一个资源有唯一的标志符,而利用不同的http动作(例如GET,POST,PUT,DELETE)来对这些资源进行相应的操作。同时该模型中还提供URI Template,它是用来定义参数化的URI,使URI的某些部分作为参数在服务中使用。可能这样解释十分含糊不清,下面用一个小例子来说明这种Web编程模型。

在该例子中,我们使用Northwind数据库,.NET Framework 3.5,开发工具我使用的是VS2005.

首先我们实现一个简单的需求,就是能够获取所有的Customers,这样我们定义一个Customer的Service Contract,其中包括名为GetAllCustomers的Operation Contract。

[ServiceContract]
 public interface ICustomerService
 {
   [OperationContract]
   [WebGet(UriTemplate = "")]
   List<Customer> GetAllCustomers();
 }

可以看到,这是WCF中一个标准Service Contract的定义,其中的WebGet属性可能是以前没有见过的,它表示该服务是用Get动作来获取数据,UriTemplate为空字符串表示它不匹配任何参数。

接下来我们实现这个Service,使之从数据库中的Customer表读取所有数据,这里的Customer是一个Data Contract。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
 public class CustomerService : ICustomerService
 {
   public List<Customer> GetAllCustomers()
   {
     List<Customer> customerList = new List<Customer>();

     //.........从数据库中获得所有的Customer

     return customerList;
   }
 }

这样,服务已经定义好并且有了实际的实现,以及我们应该用Get方法来访问这个服务,最后,该服务需要被发布出来以让外界访问。

ICustomerService customerService = new CustomerService();
 WebServiceHost customerServiceHost
   = new WebServiceHost(customerService, new Uri("http://localhost:3333/"));
 customerServiceHost.AddServiceEndpoint(typeof (ICustomerService), new WebHttpBinding(), "customers");
 customerServiceHost.Open();

在浏览器中敲入http://localhost:3333/customers,返回的是以xml格式来描述的所有customers。

如果我们想根据CustomerID来查询某一个Customer,需要在Service Contract中增加一个Operation Contract。

[OperationContract]
[WebGet(UriTemplate = "{customerID}")]
Customer GetCustomer(string customerID);

这里的customerID是参数,如果访问的URI是http://localhost:3333/customers/ALFKI,那么customerID匹配的就是ALFKI。

接下来便实现该Operation Contract,当我们在浏览器中敲入http://localhost:3333/customers/ALFKI,返回的是xml格式描述的ALFKI这个Customer的信息。

本文主要介绍如何使用WCF的Web编程模型来开发REST风格的Web Service,在接下来的文章中会介绍更多的相关内容,比如复杂的UriTemplate、POST/PUT/DELETE的http动作等。

时间: 2024-08-30 08:07:20

使用WCF的Web编程模型开发REST风格的Web Service的相关文章

在Java的Struts框架下进行web编程的入门教程_java

当点击一个超链接或提交一个HTML表单在Struts2 的 Web应用程序,输入所收集被发送到一个Java类称为操作控制器.当动作执行后,结果选择了一个资源来呈现响应.资源通常是一个JSP,但它也可以是一个PDF文件,Excel电子表格,或一个Java applet 窗口. 假设已经建立开发环境.现在让我们继续为第一个 "Hello World" 的 struts2 项目构建.这个项目的目的是建立一个Web应用程序,它收集用户的姓名,并显示"Hello World"

Web开发人员编程模型:隔离级别

ACID性质是数据库理论中的奠基石,它定义了一个理论上可靠数据库所必须具备的四个性质:原子性,一致性,隔离性和持久性.虽然这四个性质都很重要,但是隔离性最为灵活.大部分数据库都提供了一些可供选择的隔离级别,且现在许多库都增加了附加层来创建颗粒度更细的隔离.隔离级别应用范围如此之广主要是因为放宽隔离约束往往会使得可扩展性和性能提高几个数量级. 串行一致性是可用的最古老最高的隔离级别之一,它之所以倍受青睐是因为其提供的简单编程模型,即每次仅能有一个事务对给定的资源进行操作,这就避免了很多潜在的资源问

[ASP.NET 教程] 三. Web Forms编程模型

asp.net|web|编程|教程    1. Web Forms编程模型 Web Forms中的用户界面是由HTML和服务器控件共同描述的.每个控件标签都对应了一个服务器上的实际的对象. 控件触发的事件是在服务器端处理的.ASP.NET将客户端与服务器端的处理"融合"到一起,看起来就好像事件是在同一端被触发和处理的,而事实上是客户端事件导致浏览器产生回发,于是服务器端对象触发事件. <script></script>块中的服务器端代码并不能称为脚本,它是被编译

WCF专题系列(8):深度通道编程模型Part 1—设计篇

引言 从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输 协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节 都是由通道堆栈来处理的.为了简化这些处理,在WCF中提供了两种模型,一是 针对开发者的应用程序编程模型:二是用来通信的通道模型,这样对于开发者来 说,只要了解应用程序编程模型就足够了,而不会涉及到通道模型,然而,对于 通道模型进行必要的学习,可以让我们真正理解WCF中"通信"概念 ,了解WCF的 整个架构体系,从而构建出更加健壮的WCF服务或

8天玩转并行开发——第六天 异步编程模型

原文:8天玩转并行开发--第六天 异步编程模型             在.net里面异步编程模型由来已久,相信大家也知道Begin/End异步模式和事件异步模式,在task出现以后,这些东西都可以被task包装 起来,可能有人会问,这样做有什么好处,下面一一道来.   一: Begin/End模式 1: 委托     在执行委托方法的时候,我们常常会看到一个Invoke,同时也有一对你或许不常使用的BeginInvoke,EndInvoke方法对,当然Invoke方法 是阻塞主线程,而Begi

WEB编程开发常用的代码

web|编程  1. ASP与Access数据库连接: dim conn,mdbfile  mdbfile=server.mappath("数据库名称.mdb")  set conn=server.createobject("adodb.connection")  'conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfileco

WCF中的Binding模型之一: Binding模型简介

一. 信道层与服务模型层(Channel Layer and Service Mode Layer) 对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,同时也是最为复杂.最难实现的问题.在过去的若干年中, 微软先后推出了一系列广受欢迎的通信技术, 比如DCOM.Enterprise Service..NET Remoting.XML Web Service.MSMQ等等.这些技术提供了各自的编程模型,是开发人员从繁琐的完全基于通信的编程中解脱出来,使之仅仅需要关注具体的业务逻辑.WCF是

艾伟:[WCF中的Binding模型]之一: Binding模型简介

1. 信道层与服务模型层(Channel Layer and Service Mode Layer) 对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,同时也是最为复杂.最难实现的问题.在过去的若干年中, 微软先后推出了一系列广受欢迎的通信技术, 比如DCOM.Enterprise Service..NET Remoting.XML Web Service.MSMQ等等.这些技术提供了各自的编程模型,是开发人员从繁琐的完全基于通信的编程中解脱出来,使之仅仅需要关注具体的业务逻辑.WCF是

Silverlight编程模型、XAML和HTML DOM

基于 Silverlight 的应用程序使用浏览器宿主中的 Silverlight 插件通过一个基于浏览器的文档对 象模型 (DOM) 和一个包括对象树概念的特定于 Silverlight 的编程模型来公开其功能.如果使用 Silverlight 编程模型,则可以选择以下三个 API 变体之一:由浏览器解释的 JavaScript.托管代码或 由动态语言运行时 (DLR) 解释的动态语言.本主题讨论 DOM 与各可能的 API 变体之间的关系,此外, 还讨论各种 API 和应用程序模型如何使用