文档章节

ServiceStack 项目实例 007 ServiceStack.Examples - 1

丁川
 丁川
发布于 2016/10/02 12:05
字数 805
阅读 40
收藏 1

      ServiceStack的官网提供了不少的项目案例下载,不过有的示例不能拿来即用,而且案例中还有用的是用VS2010开发的,SS的版本也比较旧,要调整一下才可以运行。

       

      官方示例项目下载地址 https://github.com/ServiceStack/ServiceStack.Examples/tree/v3

      其中包含如下示例项目(第一个目录是升级到VS2013的升级记录):

       wKiom1STgQqhBZ11AAGuLM0rt1k706.jpg

        在《StarterTemplates》目录下有 一些项目起始模板

        wKioL1STgnDx6T1IAACuCxg11Ow203.jpg

 

        SS框架可以在.net3.5以上的VS开发环境下使用,也就是最低要求VS2008,示例项目中有少数是VS2010的,大部分是VS2012的。

 

        这里说明一下《ServiceStack.Examples》这个项目,

        wKioL1STg32zm_O8AADkwF2_OD4097.jpg

 

         方案中共包含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 };

}

}

        其中的 GreetService : IService<Greet>  的建议新式写法为 GreetService : Service,Execute(Greet request) 的新式写法为 Get(Greet request) 。此外因为项目中使用了ServiceStack.Examples 和框架的 ServiceStack. 有冲突, 所以 GreetService : Service的继承不能直接写,需要写成  GreetService : : ServiceStack.ServiceInterface.Service。

 

      注意其中的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 { getset; }

        public List<Order> Orders { getset; }

     

    CustomerOrders 表包含有Customer 和 Orders 两个表中外键关联方式的数据,但在3.x的示例中,并没有实现外键关联方式获取关联表的数据,而是通过在实体类中设置关联的内部类,在服务中获取数据时候组合多表数据实现,这是一种和NoSQL使用的方法和思路相一致的实现。

   (在本示例中没有演示获取多表数据时候的组合合并过程,而是直接用一组样本数据示例,样本数据中已经设置好子类的数据,针对CustomerOrders 取得的数据是Customer 加上一组Order的List,组合好后直接返回给服务 ,详见《ServiceStack.Examples.ServiceInterface》 项目下的GetNorthwindCustomerOrdersService)

 

     值得特别强调和说明是《ServiceStack.Examples.ServiceInterface》 项目下的GetUsersService.cs文件中根据一组ID或者用户名获取用户列表的服务实现:

     根据逗号分隔的id获取一组User数据的页面:

      wKiom1STqkWTEb9wAACMOMddrZ4464.jpg

      获取用户列表的程序代码: (修复后)

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 };

            }

        }

本文转载自:http://soaop.blog.51cto.com/6164600/1591633

共有 人打赏支持
丁川
粉丝 4
博文 52
码字总数 4829
作品 0
南宁
程序员
私信 提问
ServiceStack 简单使用

提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛。首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Building Cro...

麦田守望者LEO
07/23
0
0
安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

以下包括内容: 一、redis下载安装,启动 二、Redis可视化管理工具(Redis Desktop Manager)安装 三、实例化项目 一、redis下载安装,启动 1,redis官方下载地址:https://redis.io/downlo...

saucxs
08/11
0
0
安装redis服务器 jedis分片存放数据到redis服务器

redis windows 下载地址:https://github.com/ServiceStack/redis-windows 一、下载的安装包解压到盘符的指定位置,如下结构:(纯手敲,如果有缺失,见谅) Redis.doc redis-benchmark.exe r...

薄暮凉年
2015/08/07
0
0
A Fast, Simple, Typed ORM for .NET

Join the ServiceStack Google+ group or follow @servicestack for updates. A Fast, Simple, Typed ORM for .NET OrmLite's goal is to provide a convenient, DRY, config-free, RDBMS-ag......

postdep
2014/09/12
0
0
(译)在ASP.NET Web API中使用Redis

本文将介绍如何在ASP.NET Web API应用程序中使用Redis作为数据存储。利用ServiceStack.Redis库以及它强类型的Redis 客户端,实现如何建模和存储一对多的关系,以及使用Autofac的Web API依赖注...

jieqiuming
2014/05/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 懒床是对冬天最起码的尊重

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享daniwellP/桃音モモ的单曲《Nyan Cat》 《Nyan Cat》- daniwellP/桃音モモ 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪...

小小编辑
今天
48
2
码云项目100,水一发

简单回顾一下: 早期构想最多的,是希望能将PHP一些类和编码分区做得更细,所以很多尝试。但不得不说,PHP的功能过于单一,是的,也许写C/C++扩展,可以解决问题,那我为什么不用C#或者Golan...

曾建凯
今天
4
0
Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部