WCF 定义SOAP和REST风格的webservice

摘抄于其他帖子,在此记录以备后用。

1. 定义服务数据契约(SOAP与REST方式相同)

public class Employee
   {

[DataMember]
       public string Id { get; set; }

[DataMember]
       public string Name { get; set; }

[DataMember]
      public string Department { get; set; }

[DataMember]
      public string Grade { get; set; }

public override string ToString()
      {
          return string.Format("ID: {0,-5}姓名: {1, -5}级别: {2, -4} 部门: {3}",Id, Name, Grade, Department);
      }
  }

2. 定义服务行为契约(SOAP与REST方式相同)

接下来我们定义了如下一个表示服务契约的接口IEmployeesService。和基于SOAP的服务契约定义不同,我们无需在相应的操作方法上 面应用OperationContractAttribute特性,但是应用在接口/类上的ServiceContractAttribute特性仍是必需的。在这里替换OperationContractAttribute特性的分别是WebGetAttributeWebInvokeAttribute,它们均定义在System.ServiceModel.Web程序集中。

--REST

 [ServiceContract]      public interface IEmployees   {       [WebGet(UriTemplate = "all")]       IEnumerable<Employee> GetAll();    

       [WebGet(UriTemplate = "{id}")]       Employee Get(string id);    

       [WebInvoke(UriTemplate = "/", Method = "POST")]       void Create(Employee employee);    

       [WebInvoke(UriTemplate = "/", Method = "PUT")]       void Update(Employee employee);    

       [WebInvoke(UriTemplate = "{id}", Method = "DELETE")]       void Delete(string id);

   }

--SOAP

[ServiceContract]

public interface IEmployees
   {
       [OperationContract]
       IEnumerable<Employee> GetAll();

[OperationContract]
       Employee Get(string id);

[OperationContract]
       void Create(Employee employee);

[OperationContract]
       void Update(Employee employee);

[OperationContract]
       void Delete(string id);

}

契约接口IEmployeesService中定义了5个操作,分别用于实现针对员工数据的获取、添加、修改和删除。按照REST设计原则,我们将被操作的员工信息体现为某种网络资源,而操作类型最好与相应的HTTP方法相匹配。在操作方法中针对资源的操作类型与HTTP方法之间的匹配是通过应用在 它们上面的WebGetAttribute和WebInvokeAttribute特性来体现。

WebGetAttribute针对GET方法,而其他的HTTP方法则通过WebInvokeAttribute的Method属性来体现。在 IEmployeesService中,两个用于获取员工信息GetAll和Get方法均应用了WebGetAttribute特性,而其他的 Create、Update和Delete方法在应用了WebInvokeAttribute特性,并且其Method属性被分别设置为PUT、POST 和DELETE。

WebGetAttribute和WebInvokeAttribute和均具有相同的属性UriTemplate,该属性用于定义作为最终操作 URI的模板。我们不仅可以通过UriTemplate属性为操作指定一个相对于终结点地址的静态路径,还可以通过占位符实现路径中的动态部分与参数之间 的映射。

同样以定义在契约接口IEmployeesService中的5个操作方法为例,如果终结点地址为http://127.0.0.1:3721 /employees,由于用于返回所有员工列表的GetAll操作的UriTemplate被设置“All”,所以其地址为http: //127.0.0.1:3721/employees。用于返回指定员工ID的Get操作的UriTemplate被设置成“{id}”,意味着我们直接在表示请求地址的URI中指定员工的ID,而它会自动映射为该操作方法的参数id。用于删除某个指定员工的Delete操作具有相同的 UriTemplate设置,而用于创建添加新员工和修改现有员工信息的Create和Update操作,由于作为参数的Employee对象具有ID属 性,所以直接采用终结点地址。

时间: 2024-12-19 23:50:20

WCF 定义SOAP和REST风格的webservice的相关文章

SOAP扩展PHP轻松实现WebService

最近在一个PHP项目中对接外部接口涉及到WebService,搜索引擎上相关文章不是很多,找到的大都是引用一个号称很强大的开源软件 NuSOAP(下载地址:http://sourceforge.net/projects/nusoap/),即一些类.文章写描述的环境是PHP 4.3,现在都流行PHP 5.2或PHP 5.3了.先拿来试试,运行出错,原来NuSOAP提供的soapclient类与PHP 5中新增了内置的SOAP扩展的SoapClient类冲突了. 虽然NuSOAP号称可以用于所有的P

CXF发布rest风格的webservice

1.1      什么是restFul REST 是一种软件架构模式,只是一种风格,rest服务采用HTTP 做传输协议,REST 对于HTTP 的利用分为以下两种:资源定位和资源操作. l  资源定位 更加准确去定位一个互联网资源.使用url定位一个互联网资源. 比如:查询一个学生信息url 资源定位要定位一个学生信息: 不使用rest的url:http://ip:port/queryUser.action?userType=XXX&studentid=001&XXXX 使用 rest的

[WCF REST] Web消息主体风格(Message Body Style)

对于Web HTTP编程模型来说,服务契约中作为操作的方法无须应用OperationContractAttribute特性,只需要根据需要应用WebGetAttribute与WebInvokeAttribute特性即可.前者针对GET HTTP方法,或者则针对其他HTTP方法.WebGetAttribute与WebInvokeAttribute的属性BodyStyle和IsBodyStyleSetExplicitly涉及到“Web消息主体风格”的话题. 1: [AttributeUsage(At

使用Firefox的“HttpRequester”插件测试REST风格的webservice

在webservice的开发中,一般来说REST风格的webservice是可以直接用浏览器进行请求访问的.但是为了能够更加直观的观察整个请求过程,这时候我们可以使用一些软件或者浏览器插件来完成这项工作,我这里推荐一个Firefox的插件--HttpRequester 关于这个插件的安装不用多说,下面我将简单介绍一下这个插件的使用: 为了方便测试,我写了一个登录的接口:http://localhost:8580/(ProjectName)/services/user/login.json 然后打

SpringMVC实现Restful风格的WebService

1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文(链接1), 该博文中的第四小结是关于如何创建SpringMVC+maven教程.下面只给出创建好的目录结构,其中的部分文件如java程序是后面要完成的. 3.指定依赖文件 maven具有特定的文件结构,并通过pom.xml来管理工程.下面是在实现Restful时需要的依赖. 1 <project x

【译】使用python创建一个简单的restful风格的webservice应用

这是一个如何使用python快速构建简单restful风格webservice的应用教程. 1.分析rest路由规则 rest风格的服务通常使用web.py来创建服务器端脚本,一般情况下包含两个url路径: 一个是为了查询所有用户,一个是为了查询单个用户. 例如下面的url: http://localhost:8080/users http://localhost:8080/users/{id} 2.搭建web.py环境 首先你应该安装web.py模块到你的python环境下.如果你之前没有的话

restful风格的webservice开发之概念准备篇

理解restful:什么是rest,rest是Representational State Transfer的缩写,翻译过来就是“表现层状态转化”.这里有点不准确,其实rest省略了主语表现层指的是资源的表现层.在这里所谓的资源指的是互联网上的一个实体,一个具体的信息.比如作为交互的一个文本,一段个人信息,一张图片等等...你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI,要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符.那么什么是

java axis调用带有soap头(soapheader)的.net webservice

使用axis调用.net带soapheader的webservice是如何实现的,现在贴出代码 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns

Android自己定义ViewGroup打造各种风格的SlidingMenu

看鸿洋大大的QQ5.0側滑菜单的视频课程,对于側滑的时的动画效果的实现有了新的认识,似乎打通了任督二脉.眼下能够实现随意效果的側滑菜单了.感谢鸿洋大大!! 鸿洋大大用的是HorizontalScrollView来实现的側滑菜单功能,HorizontalScrollView的优点是为我们攻克了滑动功能.处理了滑动冲突问题.让我们使用起来很方便.可是滑动和冲突处理都是android中的难点,是我们应该掌握的知识点,掌握了这些,我们能够不依赖于系统的API.随心所欲打造我们想要的效果.因此这篇文章我将