REST与SOA两种架构下WCF的异同比较(含源码)

开发 后端
REST(Representational State Transfer)与SOA(Service-Oriented Architecture)作为当今软件架构中主流的两种架构思想在当前开发过程中已经越来越流行。作为微软.NET平台下的下一代通讯技术,WCF也很好的体现了对他们的支持。那么他们到底有哪些差别又有哪些相同之处呢。?

REST(Representational State Transfer)与SOA(Service-Oriented Architecture)作为当今软件架构中主流的两种架构思想在当前开发过程中已经越来越流行。作为微软.NET平台下的下一代通讯技术,WCF也很好的体现了对他们的支持。那么他们到底有哪些差别又有哪些相同之处呢。?本篇将针对这个问题谈谈自己的认识,并通过Demo演示程序。

本篇设计的内容如下:

1、REST的特性

2、SOA的特征

3、REST与SOA的共同点

4、REST与SOA的不同点

5、Demo程序说明

*REST的特性。

首先给出一张图:

 

 

它基于HTTP协议,是一种明确构建在客户端/服务端体系结构上的一种风格。特征如下:

1、网络上的资源都被抽象为资源,这些资源都具有唯一的统一资源标识符

(URI:Uniform Resource Identiter),这些资源都是自我们描述的。这些资源使用HTTP内容标头类型指定。如:XML、JSON、HTML、PNG等。

2、服务的使用者通过HTTP协议的标准动作(Get、Put、Post、Delete)通过统一的接口对资源进行操作。

3、对资源进行的操作不会改变它的URI。

4、客户端、服务端之间的交互是没有状态的。由于这种无状态行,服务端不需要为每个客户端维护Context

*SOA的特征

首先给出一张图:

 

 

1、通过网络终结点对外提供服务。

2、粗粒度的服务接口。

*REST与SOA的共同点

REST与SOA两者,虽有不同点,但是他们都作为服务的不同架构风格,具有服务的一般属性。具体如下:

1、统一的服务契约接口与服务接口

2、松散的耦合。

3、只要有权限都可以进行访问

*REST与SOA的不同点

1、REST风格下的,只有一种协议,那就是HTTP。而SOA下的WCF就和多种协议了。如:TCP、HTTP、MSMQ等多种协议

2、使用方式上的不同。REST只要客户端能够模拟HTTP请求,通过标准的HTTP动作,都可以进行访问。它使用的是HTTPChannel管道,而SOA下的WCF由于

协议的多样性,使用的管道有HTTPChannel、TcpChannel、RPC等多种。

3、REST寄宿时,虽然可以选择多种寄宿方式,但必须有IIS的支持(稍后章节会介绍它的寄宿方式)。SOA下的WCF却没有这个限制

*Demo程序

程序沿用了上节使用的实例,分别实现了REST与SOA服务。服务中,契约的定义以及实现完全相同。为了使用用REST相同的协议,SOA服务端采用了wsHttpBinding协议。REST与SOA服务的消费者采用同一个客户端。

程序结构如下图:

 

 

客户端对SOA服务的调用代码如下:

  1. using (ChannelFactory<ILog> factory = new ChannelFactory<ILog>("SOAService"))  
  2. {  
  3. ILog log = factory.CreateChannel();  
  4. List<LogEntity> listAll = log.GetAll();  
  5. Console.WriteLine(string.Format("GetAll 方法获取到日志记录有{0}条", listAll.Count));  
  6. Console.WriteLine();  
  7. const string year = "2011";  
  8. const string month = "10";  
  9. List<LogEntity> list = log.GetMonthLog(year, month);  
  10. Console.WriteLine(string.Format("GetMonthLog 方法获取到{0}年{1}月日志记录有{2}条",year,month,list.Count));   

对REST的调用代码如下:

  1. HttpWebRequest request = WebRequest.Create("http://localhost:27790/RESTService.svc/") as HttpWebRequest;  
  2. request.Method = "GET";  
  3. HttpWebResponse response = request.GetResponse() as HttpWebResponse;  
  4. using (StreamReader reader=new StreamReader(response.GetResponseStream()))  
  5. {  
  6. if (response.StatusCode==HttpStatusCode.OK)  
  7. {  
  8. Console.WriteLine(reader.ReadToEnd());  
  9. }  

如下图所示:

 

 

在REST中调用 GetMonthLog方法,只需将URI 换成http://localhost:27790/RESTService.svc/Get/2011/10即可

有兴趣的朋友可以试试。

源码下载:http://files.cnblogs.com/tyb1222/WCFStyle.rar

原文:http://www.cnblogs.com/tyb1222/archive/2011/10/27/2226845.html

【编辑推荐】

  1. WCF Web API轻松实现REST
  2. jQuery调用WCF开发实例经验分享
  3. 手把手教你如何应用WCF中的REST
  4. 不要在using语句中调用WCF服务
  5. 详解WCF 4安全性以及新WIF框架介绍
责任编辑:陈贻新 来源: tyb1222的博客
相关推荐

2009-12-25 16:58:19

ADSL接入方式

2011-04-01 16:14:17

ADSL接入方式PPPoE

2010-02-24 14:25:48

WCF地址

2010-07-14 16:28:58

配线架

2009-12-07 13:42:24

WCF框架

2009-12-31 13:37:46

多协议GMPLS

2018-12-03 09:03:18

SANNAS存储系统

2012-10-16 09:40:38

洗牌算法

2009-11-06 12:59:56

WCF服务通信

2024-01-09 09:09:45

RESTGraphQL

2018-06-04 09:43:53

分层存储Linux

2010-07-13 10:47:18

Perl面向对象

2009-06-19 17:05:08

MVC框架Struts和Spri

2009-11-06 14:40:34

WCF REST架构

2010-09-06 17:26:54

SQL函数

2023-01-30 08:00:00

开发人工智能语言

2009-12-04 17:13:18

2009-10-20 13:59:59

网络综合布线系统

2009-07-31 14:04:11

C#时间比较大小

2013-04-18 09:33:52

点赞
收藏

51CTO技术栈公众号