本文转载自 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 应用程序启动时,您的服务合同列出作为元数据操作,如图所示: