Service Stack 与 WCF

本文转载自 http://www.cnblogs.com/shanyou/p/3348347.html

 

ServiceStack是一个开源的、支持.NET与Mono平台的REST Web Services框架。同类产品微软自有的是WCF。

Web服务通常有远程过程调用(RPC)和RESTful (HTTP)两类,现在占据主导地位的Web服务是RESTful (HTTP)。

 

    ServiceStack的组件见下:

包含高性能Razor Engine的Web应用框架;

支持例如HTML,XML,JSON,SOAP等多种格式的基于消息的Web服务框架;

包含内建IOC(Inversion of Control)的容器;若干内建库文件,诸如:Text serializer,Redis Client,ORM以及caching providers;

除了ASP.NET Hosting和Mono Hosting之外,还包含self-hosting选项。

 

    2年前REST就已经成为Web API部署方式的主流了,而且一直保持这种发展势头,现在基本上都是REST服务,SOAP在企业内网还存在.

    远程过程调用 (RPC) ,每个请求旨在类似于函数调用:

    public interface IService{ string DoSomething(int input);}

    RPC 方法对服务的修改非常不友好。 例如前面的代码段,如果要求从客户端来执行更高版本的 Web 服务的 DoSomething 方法的两个输入参数 — 或需要返回字符串值之外的另一个字段 —— 给老客户重大更改是不可避免的。 当然,您始终可以创建平行的 DoSomething_v2 方法,要带两个输入的参数,但久而久之会搞乱您的 Web 服务接口和消费者,服务变得越来越丑,用WCF实现的Web服务就是属于这种情况。

 

    本文假定您有一些熟悉 WCF 和.NET 框架。 为了更好地展示WCF 概念可以如何转化为 ServiceStack 的概念,首先会在WCF中实现服务层。我会告诉你如何通过将WCF Web 服务移植到等效的使用 ServiceStack 转换为跨平台的 Web 服务。

ServiceStack 规定每个唯一的请求是对象所标识唯一的请求,这意味着你不能重用 DTO 跨多个服务实现与 ServiceStack 的请求。ServiceStack 支持不同的操作,如有 Get 和 Post。 您的选择在这里仅影响的 HTTP 请求。 指定任何 Web 服务请求是指可以通过 HTTP GET 和 HTTP POST 调用操作。 这种强制措施,简化了 rest 风格的 Web 服务实现。要将您的 ServiceStack Web 服务变成 rest 风格的 Web 服务,只需添加 URL [Route(...)]向您的 Web 服务请求声明属性。

以ASP.NET Hosting承载ServiceStack,创建一个空的ASP.NET应用,使用 NuGet 包管理器控制台将 ServiceStack 引用添加到 ServiceStack.Host.AspNet中所示

 

 

ServiceStack Web 应用程序启动时,您的服务合同列出作为元数据操作,如图所示:

时间: 2024-10-26 02:32:46

Service Stack 与 WCF的相关文章

按照Web Service方式调用WCF服务的问题

WCF按照basicHttpBinding方式发布,.net按照Web Service方式调用,自动生成的Proxy中枚举类型和Nullable类型的参数,在Proxy里面发现一些不一样的东西,都额外生成一个配对的XXSpecified的字段和属性.你必须将该值设为true,否则,WCF序列化的时候回忽略相应的枚举类型或Nullable类型,全部使用的默认值,你所赋的值都被忽略了,只有你将XXSpecified设置为true就可以了. [TestMethod] public void TestA

我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承

当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替.在开始本Blog之前,我先来谈谈我对SOA和OO的区别,首先申明,这只是一家之言,欢迎大家批评指正,并且关于SO的谈论不是本Blog的主题,只是主题的引子,在这里只是简单讨论而已 . OO和SO之间具有共同的部分,在运用的领域上存在交集,只有在基于他们交集层面上谈论谁是谁非才有意义,下面是我对SO和

WCF中的Binding模型之二: 信道与信道栈(Channel and Channel Stack)

WCF采用基于消息交换的通信方式,而绑定则实现了所有的通信细节.绑定通过创建信道栈实现了消息的编码与传输,以及对WS-*协议的实现.在这一节中,我们就来着重介绍WCF中的信道和信道栈.在正式开始对信道和信息栈的介绍之前,我们先来介绍两个重要的类型:CommunicationObject和DefaultCommunicationTimeouts. 一. CommunicationObject与DefaultCommunicationTimeouts WCF绑定模型涉及多种类型的组件,比如信道.信道

WCF技术剖析之二:再谈IIS与ASP.NET管道

IIS 5.x与ASP.NET 我们先来看看IIS 5.x是如何处理基于ASP.NET资源(比如.aspx,.asmx等)请求的,整个过程基本上可以通过图1体现. IIS 5.x运行在进程InetInfo.exe中,在该进程中一个最重要的服务就是名为World Wide Web Publishing Service(简称W3SVC)的Windows Service.W3SVC的主要功能包括HTTP请求的监听.工作进程的管理以及配置管理(通过从Metabase中加载相关配置信息)等. 当检测到某个

WCF后续之旅(1) WCF是如何通过Binding进行通信的

<我的WCF之旅>系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10.由于工作原因,沉寂了几个月,今天开始WCF新的旅程.如果说<我的WCF之旅>主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制.设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能). Windows Communic

WCF后续之旅(18):谈谈Binding

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

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

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

《WCF的绑定模型》博文系列汇总[共6篇]

从整个基础构架的层次结构上讲,WCF可以分成两个部分:服务模型层(Service Mode Layer)和信道层(Channel Layer).服务模型层建立在信道层之上,提供了一个统一的.可扩展的编程模型.信道层则通过绑定(Binding)建创的信道栈为消息通信提供了一个传输.处理的通道. [第1篇] Binding模型简介 对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,同时也是最为复杂.最难实现的问题.在过去的若干年中, 微软先后推出了一系列广受欢迎的通信技术, 比如DCOM.E

WCF中的Binding模型之六(完结篇):从绑定元素认识系统预定义绑定

由于绑定对象由一系列有序的绑定元素组成,绑定元素最终决定着信道栈中信道的组成,而信道的组成最终又决定了信道栈对消息进行处理的方式和能力,所有要确定绑定的特性和能力,我们可以通过查看其绑定元素的构成来一窥究竟.为此我们我们写了一个简单的方法,用于列出一个具体的绑定对象所有的绑定元素,在介绍一个个具体的系统绑定中,我会使用该方法: 1: static void ListAllBindingElements(Binding binding) 2: { 3: BindingElementCollecti