文档章节

ServiceStack 项目实例 008 ServiceStack.Examples - 2

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

   先回归下SS的运行环境 

     wKiom1STuCCRipP3AAJMjYAmyzo242.jpg

 

          我们接续前文,说明一下ServiceStack.Examples中的实用经典的代码(下面的代码是更新成新版写法后的):

        

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

            }

 

          这段服务实现的功能是通过一组ID或者一组用户名为条件,搜索出一个用户列表。我们先看入口类的参数参数定义:

          

1

2

3

4

5

public class GetUsers

{

    public List<long> UserIds { getset; }

    public List<string> UserNames { getset; }

}

        入口类参数定义了两个列表,

1

UserIds

       为用户ID的一组列表 ,通过

1

dbConn.GetByIds<User>(request.UserIds)

查询到符合这组ID的用户列表, 再调用

1

users.AddRange

加入到出口类中的data属性上      

1

UserNames

       为用户名字的一组列表,通过

1

dbConn.Select<User>("UserName IN ({0})", request.UserNames.SqlInValues())

查询到一组包含有这组用户名的用户(是通过SQL的IN操作),再调用

1

users.AddRange

加入到出口类的data属性上

 

 

       出口类的定义:

1

2

3

4

5

6

7

8

9

10

public class GetUsersResponse

{

    public GetUsersResponse()

    {

        this.data = new List<User>();

        this.ResponseStatus = new ResponseStatus();

    }

    public List<User> data { getset; }

    public ResponseStatus ResponseStatus { getset; }

}

      出口类是有一个User实体类集合,加上一个操作相应状态类组成,原有出口类中用户列表使用的是Users属性(

1

this.Users = ArrayOfUser{get;set;}

),根据对接到extjs的要求,这个列表的属性要求名字为data,这里改为data,ArrayOfUser是一个用在旧版中的自定义的集合类,我们只需要使用List<User>即可,不需要定义这个集合

 

     以下是User实体类:

1

2

3

4

5

6

7

8

9

public class User

{

    [AutoIncrement]

    public int Id { getset; }

    public string UserName { getset; }

    public string Email { getset; }

    public string Password { getset; }

    public Guid GlobalId { getset; }

}

    

     ResponseStatus 是SS系统内置的HTTP相应状态类,其中封装了HTTP错误返回代码,错误消息以及错误堆栈等,而且提供了三种形式的覆写构造方式。 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

// Summary:

    //     Common ResponseStatus class that should be present on all response DTO's

    [DataContract]

    public class ResponseStatus

    {

        // Summary:

        //     Initializes a new instance of the ServiceStack.ServiceInterface.ServiceModel.ResponseStatus

        //     class.  A response status without an errorcode == success

        public ResponseStatus();

        //

        // Summary:

        //     Initializes a new instance of the ServiceStack.ServiceInterface.ServiceModel.ResponseStatus

        //     class.  A response status with an errorcode == failure

        public ResponseStatus(string errorCode);

        //

        // Summary:

        //     Initializes a new instance of the ServiceStack.ServiceInterface.ServiceModel.ResponseStatus

        //     class.  A response status with an errorcode == failure

        public ResponseStatus(string errorCode, string message);

        // Summary:

        //     Holds the custom ErrorCode enum if provided in ValidationException otherwise

        //     will hold the name of the Exception type, e.g. typeof(Exception).Name A value

        //     of non-null means the service encountered an error while processing the request.

        [DataMember(Order = 1)]

        public string ErrorCode { getset; }

        //

        // Summary:

        //     For multiple detailed validation errors.  Can hold a specific error message

        //     for each named field.

        [DataMember(Order = 4)]

        public List<ResponseError> Errors { getset; }

        //

        // Summary:

        //     A human friendly error message

        [DataMember(Order = 2)]

        public string Message { getset; }

        //

        [DataMember(Order = 3)]

        public string StackTrace { getset; }

    }

 

更新了使用新版ServiceStack后的项目代码 

http://down.51cto.com/data/1964107 

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

共有 人打赏支持
丁川
粉丝 4
博文 52
码字总数 4829
作品 0
南宁
程序员
加载中

评论(1)

丁川
丁川
已经不使用了,要收费,免费版本只有10个api的使用权限。
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
3分钟wamp安装redis扩展超级简单

购买阿里云相关服务,这里可以领取优惠券, 有的产品5折优惠哟, 注意, 领取的优惠券30天内有效,尽快使用: 领取方式:进入链接后 页面下拉 一键领取全部 或者按需每次领取对应的优惠,领取链接...

兔子想飞
2015/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部