WCF4.0新特性体验(4):Rest In WCF4.0
前段时间一直翻译《WCF技术内幕》,所以这个系列停滞了下来,现在翻译工作完成。现在继续来写《WCF4.0新特性体验》这个系列。今天我们来学习一下Rest WCF服务,文章会先介绍一下Rest的基本概念,以及特点,其次会介绍WCF如何实现对Rest的支持,也就是Rest WCF的底层机制。重点提到其中几个重要的类型。最后会介绍WCF4.0中对于Rest编程的改进。如此组织也是为了大家可以对Rest 以及Rest WCF 服务有个全面系统的了解。最后我也会提供一个Rest WCF的例子代码,供大家参考。
- Representational :中文直译:代表的,表像的。如果把WEB 服务器端中所有的东西(数据)都看作是资源(Resource),那么呈现在用户面前(客户端)的就是资源的表像(Representation)。每一个资源都有自己的唯一标识(URI)。
- State :中文直译:状态。首先这个状态是客户端的状态,而不是服务器端的状态(在REST 中,服务器端应该是无状态的)。那么,把State和Representation联系在一起(Representational State),可以理解成:每一个资源(Resource)在客户端的表像(Representation)就是客户端的一个状态(State)。
- Transfer:中文直译:转移。当用户通过不同的URI访问不同的资源时,客户端的表像(Representation)也会随着变化,也就意味着客户端的状态变更(Transfer)了,连起来就是:Representational State Transfer。
- 1.客户-服务器:这种规范的提出,改善了用户接口跨多个平台的可移植性,并且通过简化服务器组件,改善了系统的可伸缩性。最为关键的是通过分离用户接口和数据存储这两个关注点,使得不同用户终端享受相同数据成为了可能。
- 2.无状态性:无状态性是在客户-服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的,即从客户到服务器的每个request都 必须包含理解该request所必须的所有信息。这个规范改善了系统的可见性(无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当 前request,而不必了解所有的request历史),可靠性(无状态性减少了服务器从局部错误中恢复的任务量),可伸缩性(无状态性使得服务器端可 以很容易的释放资源,因为服务器端不必在多个request中保存状态)。同时,这种规范的缺点也是显而易见得,由于不能将状态数据保存在服务器上的共享 上下文中,因此增加了在一系列request中发送重复数据的开销,严重的降低了效率。
- 3.缓存:为了改善无状态性带来的网络的低效性,我们填加了缓存约束。缓存约束允许隐式或显式地标记一个response中的数据,这样就赋予了客户 端缓存response数据的功能,这样就可以为以后的request共用缓存的数据,部分或全部的消除一部分交互,增加了网络的效率。但是用于客户端缓存了信息,也就同时增加了客户端与服务器数据不一致的可能,从而降低了可靠性。
- 4.统一接口:REST架构风格的核心特征就是强调组件之间有一个统一的接口,这表现在REST世界里,网络上所有的事物都被抽象为资源,而REST 就是通过通用的链接器接口对资源进行操作。这样设计的好处是保证系统提供的服务都是解耦的,极大的简化了系统,从而改善了系统的交互性和可重用性。并且 REST针对Web的常见情况做了优化,使得REST接口被设计为可以高效的转移大粒度的超媒体数据,这也就导致了REST接口对其它的架构并不是最优的。
- 5.分层系统:分层系统规则的加入提高了各种层次之间的独立性,为整个系统的复杂性设置了边界,通过封装遗留的服务,使新的服务器免受遗留客户端的影响,这也就提高了系统的可伸缩性。
- 6.按需代码:REST允许对客户端功能进行扩展。比如,通过下载并执行applet或脚本形式的代码,来扩展客户端功能。但这在改善系统可扩展性的同时,也降低了可见性。所以它只是REST的一个可选的约束。
- 每个Resource都有一个唯一的ID。
- 通过Representation(客户端)来处理Resource(服务器端)。也就是说,客户端不能直接操作服务器端的Resource,只能通过对相应的Representation的操作,并发送相应的请求,最后由服务器端来处理Resource并返回结果。
- 客户端和服务器端传送的任何一个Message(消息),都应该是自描述的。也就是说处理这个Message所需要的上下文环境都应该包含在这个Message当中。
- 多媒体的交互系统,客户端和服务器端传送的内容可以是文档,图片,声音等等多媒体数据,这也是一个Resource能够对应不同的Representation(例如文档,图片等)的基础。
(1)网络上的所有事物都被抽象为资源(resource),比如图片、音乐、视频、文字、以及服务等等;
(2)每个资源有唯一的资源标识符(resource identifier),URI定位资源;
(3)通过通用的连接器接口(generic connector interface)对资源进行操作,比如使用 HTTP 标准动词(GET、POST、PUT 和 DELETE)的统一接口完成操作;
(4)对资源的各种操作不会改变资源标识符,URI不变;
(5)所有的操作都是无状态的(stateless)。
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService1/GetData</Action>
</s:Header>
<s:Body>
<GetData xmlns="http://tempuri.org/">
<value>111</value>
</GetData>
</s:Body>
</s:Envelope>
public string GetData(string id);
[WebInvoke(UriTemplate = "/Rest4/Add/{id}", Method = "PUT")]
public string AddData(string id);
binding="webHttpBinding"
contract="RestWcfServiceDemo.IRestService4" />
public string GetData(string id)
{
return "Hello Rest";
}
[WebInvoke(UriTemplate = "/Rest4/Add/{id}", Method = "PUT")]
public string AddData(string id)
{
return "Hello Rest";
}
[WebInvoke(UriTemplate = "/Rest4/Update/{id}", Method = "POST"),]
public string UpdateData(string id)
{
return "Hello Rest";
}
[WebInvoke(UriTemplate = "/Rest4/Delete/{id}", Method = "DELETE")]
public string DeleteData(string id)
{
return "Hello Rest";
}
<behavior name="HelpBehavior">
<webHttp helpEnabled="true" />
</behavior>
</endpointBehaviors>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheFor30Seconds" duration="30" varyByParam="format" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
[WebGet(UriTemplate = "/Rest4/Get/{id}")]
public string GetData(string id)
{
return "Hello Rest";
}

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Embedded Linux 技术与概念解析
引言 Embedded Linux技术基于开放源码的资源,并且已经是当今最重要的嵌入式应用技术之一。Embedded Linux是烧录在目标装置上的系统,1个Embedded Linux系统包含Linux kernel与 root filesystem 2大部分,Embedded Linux系统到底包含哪些组成要素构成,本文将由概念的层面进行解析。 本文 由于目前的目标装置,都必须嵌入极为复杂的功能,所以嵌入式操作系统(Embedded system)成为嵌入式系统不可或缺的要素。由于嵌入式系统是功能导向的系统,因此必须设计、选择或购买正确(或适合)的目标装置,才能开始实作并嵌入嵌入式系统。因此,嵌入式系统技术是以功能、与目标装置为分类的1种技术。 例如,与PDA相关的目标装置(即硬件)、与MP3播放器相关的目标装置、与3G手机相关的目标装置...等等;使用这些目标装置所开发的特定功能系统,便是PDA的嵌入式系统、MP3音乐播放的嵌入式系统、3G手机的嵌入式系统。 Embedded Linux其实并不是1个操作系统,而是代表应用Linux系统于Embedded system的名词。Em...
- 下一篇
基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET 4.0 简介
介绍 AgileEAS.NET应用开发平台,简称EAS.NET,是基于敏捷并行开发思想以及.NET构件技术而开发的一个应用系统快速开发平台,用于帮助中小型软件企业建立一条适合快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的,AgileEAS.NET应用开发平台包含基础类库、资源管理平台、运行容器、开发辅助工具等四大部分,资源管理平台为敏捷并行开发提供了设计、实现、测试等开发过程的并行,基于AgileEAS.NET平台的应用系统的各个业务功能子系统,在系统体系结构设计的过程中被设计成各个原子功能模块,各个子功能模块按照业务功能组织成单独的程序集文件,各子系统开发完成后,由AgileEAS.NET资源管理平台进行统一的集成部署。 AgileEAS.NET应用开发平台也是为应用信息系统开发而提供的一组低层功能集合及开发支撑平台,应用信息系统的开发建立在此平台之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的作到多快省。 AgileEAS.NET平台的核心思想是包含两点,一是基于DotNET构件技术的插件式开发,二是基于敏捷并行开发方...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境