ServiceStack 项目实例 007 ServiceStack.Examples - 1
2016-10-02 00:00
651 查看
ServiceStack的官网提供了不少的项目案例下载,不过有的示例不能拿来即用,而且案例中还有用的是用VS2010开发的,SS的版本也比较旧,要调整一下才可以运行。
官方示例项目下载地址 https://github.com/ServiceStack/ServiceStack.Examples/tree/v3
其中包含如下示例项目(第一个目录是升级到VS2013的升级记录):
在《StarterTemplates》目录下有 一些项目起始模板
SS框架可以在.net3.5以上的VS开发环境下使用,也就是最低要求VS2008,示例项目中有少数是VS2010的,大部分是VS2012的。
这里说明一下《ServiceStack.Examples》这个项目,
方案中共包含7个项目,在Host目录下的三个项目
ServiceStack.Examples.Clients Web版的客户端项目
ServiceStack.Examples.Host.Console 控制台版的服务端项目
ServiceStack.Examples.Host.Web Web版的服务端项目
在Test目录下的两个项目
ServiceStack.Examples.Tests 基本功能测试
ServiceStack.Examples.Tests.Integration 整合方式测试(客户端和服务端整合使用)
ServiceStack.Examples.ServiceInterface 提供服务的项目(Service写在这个项目)
ServiceStack.Examples.ServiceModel 模型定义的项目(包含有路由)
这个项目在最后发布时仅需要发布Hosts目录下的文件即可,其他的项目基本是类库和测试项目。这个项目当中服务的调用使用了旧式的写法,比如
其中的 GreetService : IService<Greet>的建议新式写法为 GreetService : Service,Execute(Greet request) 的新式写法为 Get(Greet request) 。此外因为项目中使用了ServiceStack.Examples 和框架的 ServiceStack. 有冲突, 所以 GreetService : Service的继承不能直接写,需要写成 GreetService : : ServiceStack.ServiceInterface.Service。
注意其中的ServiceStack.Examples.ServiceModel 中的Types中实体类模型的定义:
CustomerOrders 表包含有Customer 和 Orders 两个表中外键关联方式的数据,但在3.x的示例中,并没有实现外键关联方式获取关联表的数据,而是通过在实体类中设置关联的内部类,在服务中获取数据时候组合多表数据实现,这是一种和NoSQL使用的方法和思路相一致的实现。
(在本示例中没有演示获取多表数据时候的组合合并过程,而是直接用一组样本数据示例,样本数据中已经设置好子类的数据,针对CustomerOrders 取得的数据是Customer 加上一组Order的List,组合好后直接返回给服务 ,详见《ServiceStack.Examples.ServiceInterface》 项目下的GetNorthwindCustomerOrdersService)
值得特别强调和说明是《ServiceStack.Examples.ServiceInterface》 项目下的GetUsersService.cs文件中根据一组ID或者用户名获取用户列表的服务实现:
根据逗号分隔的id获取一组User数据的页面:
获取用户列表的程序代码: (修复后)
官方示例项目下载地址 https://github.com/ServiceStack/ServiceStack.Examples/tree/v3
其中包含如下示例项目(第一个目录是升级到VS2013的升级记录):
在《StarterTemplates》目录下有 一些项目起始模板
SS框架可以在.net3.5以上的VS开发环境下使用,也就是最低要求VS2008,示例项目中有少数是VS2010的,大部分是VS2012的。
这里说明一下《ServiceStack.Examples》这个项目,
方案中共包含7个项目,在Host目录下的三个项目
ServiceStack.Examples.Clients Web版的客户端项目
ServiceStack.Examples.Host.Console 控制台版的服务端项目
ServiceStack.Examples.Host.Web Web版的服务端项目
在Test目录下的两个项目
ServiceStack.Examples.Tests 基本功能测试
ServiceStack.Examples.Tests.Integration 整合方式测试(客户端和服务端整合使用)
ServiceStack.Examples.ServiceInterface 提供服务的项目(Service写在这个项目)
ServiceStack.Examples.ServiceModel 模型定义的项目(包含有路由)
这个项目在最后发布时仅需要发布Hosts目录下的文件即可,其他的项目基本是类库和测试项目。这个项目当中服务的调用使用了旧式的写法,比如
1 2 3 4 5 6 7 | public class GreetService : IService<Greet> { public object Execute(Greet request) { return new GreetResponse { Result = "Hello " + request.Name }; } } |
注意其中的ServiceStack.Examples.ServiceModel 中的Types中实体类模型的定义:
1 2 3 4 5 6 7 8 9 | public class CustomerOrders { public CustomerOrders() { this .Orders = new List<Order>(); } public Customer Customer { get ; set ;} public List<Order>Orders { get ; set ;} |
(在本示例中没有演示获取多表数据时候的组合合并过程,而是直接用一组样本数据示例,样本数据中已经设置好子类的数据,针对CustomerOrders 取得的数据是Customer 加上一组Order的List,组合好后直接返回给服务 ,详见《ServiceStack.Examples.ServiceInterface》 项目下的GetNorthwindCustomerOrdersService)
值得特别强调和说明是《ServiceStack.Examples.ServiceInterface》 项目下的GetUsersService.cs文件中根据一组ID或者用户名获取用户列表的服务实现:
根据逗号分隔的id获取一组User数据的页面:
获取用户列表的程序代码: (修复后)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public object Any(GetUsers request) { using ( var dbConn = ConnectionFactory.OpenDbConnection()) { var users = new List<User>(); if (request.UserIds != null && request.UserIds.Count >0) { users.AddRange(dbConn.GetByIds<User>(request.UserIds)); } if (request.UserNames != null && request.UserNames.Count >0) { users.AddRange(dbConn.Select<User>( "UserName IN ({0})" , request.UserNames.SqlInValues())); } return new GetUsersResponse { data = users }; } } |
相关文章推荐
- ServiceStack 项目实例 007 ServiceStack.Examples - 1
- ServiceStack 项目实例 008 ServiceStack.Examples - 2
- ServiceStack 项目实例 008 ServiceStack.Examples - 2
- ServiceStack 项目实例 004 建立第一个服务--添加信息
- ServiceStack 项目实例 003 建议的文件结构定义及服务类说明
- ServiceStack 项目实例 001 建立项目结构
- ServiceStack 项目实例 003 建议的文件结构定义及服务类说明
- ServiceStack 项目实例 000 简介
- ServiceStack 项目实例 000 简介
- ServiceStack 项目实例 010 ServiceStack.Northwind - 2
- ServiceStack 项目实例 006 通过官方示例总结的项目结构方案
- ServiceStack 项目实例 006 通过官方示例总结的项目结构方案
- ServiceStack 项目实例 009 ServiceStack.Northwind - 1
- ServiceStack 项目实例 005 使用第一个服务功能 (在MVC项目中)
- 在c#中使用servicestackredis操作redis的实例代码
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
- ExtJS 学习总结 (二)-- 项目实例
- maven基础学习(四)-简单实例(使用Archetype生成项目骨架)