文档章节

ServiceStack 项目实例 008 ServiceStack.Examples - 2

丁川
 丁川
发布于 2016/10/02 12:05
字数 773
阅读 27
收藏 1
点赞 0
评论 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 项目实例 007 ServiceStack.Examples - 1

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

鼎六智能 ⋅ 2016/10/02 ⋅ 0

ServiceStack 项目实例 006 通过官方示例总结的项目结构方案

研读了官方示例的ServiceStack.Examples 和 ServiceStack.Northwind,总结如下的项目方案结构,这种方式比较适合较大的项目,并且规范化很好,易于扩展和对接。 项目结构规范要求 根据Servi...

鼎六智能 ⋅ 2016/10/02 ⋅ 0

C#客户端Redis服务器的分布式缓存

介绍 在这篇文章中,我想介绍我知道的一种最紧凑的安装和配置Redis服务器的方式。另外,我想简短地概述一下在.NET / C#客户端下Redis hash(哈希类型)和list(链表)的使用。 在这篇文章主要...

鱼煎 ⋅ 2016/07/14 ⋅ 0

Redis 安装及配置 (转整理)

Redis 安装及配置 (转整理) Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合...

rootliu ⋅ 05/28 ⋅ 0

redis windows 安装

笔记 redis下载地址:https://github.com/ServiceStack/redis-windows Ⅰ.git clone完成, 进入downloads文件夹,找一份你喜欢的版本,解压. 如果有文件洁癖的同学可以解压到自定义文件夹中去....

___大侠 ⋅ 05/22 ⋅ 0

综合应用WPF/WCF/WF/LINQ之三十四:在XBAP项目中模拟弹出一个自定义的“模态窗口”

在实际应用中,我们有时候的确需要弹出一个自定义的模态窗口。为此,我们可以采用Popup控件的方法来接近这个需求,当然,这里的“模态窗口”并不是真的窗口。   为了方便大家学习,请单击此...

余二五 ⋅ 2017/11/14 ⋅ 0

ServiceStack 项目实例 001 建立项目结构

ServiceStack 用于服务开发,可以为各种形式的网站、软件、APP等提供数据服务,可以提供REST,WebService以及二级制数据形式的服务。 下面根据我们具体项目要求,说一下建立项目的方式: 建立...

鼎六智能 ⋅ 2016/10/02 ⋅ 0

ServiceStack 项目实例 000 简介

ServiceStack 是一个功能齐全的服务开发套件,接近Java下的SSH的结构和思路,整体类似轻量级的SSH,主要是用于REST模式的接口服务的开发,后文中简称SS。 和SS功能相似的框架有WCF、WebAPI,...

鼎六智能 ⋅ 2016/10/02 ⋅ 0

使用ServiceStackRedis链接Redis简介

注:关于如何在windows,linux下配置redis,详见这篇文章:) 目前网上有一些链接Redis的C#客户端工具,这里介绍其中也是目前我们企业版产品中所使用的ServiceStackRedis, 链接地址: https://...

长平狐 ⋅ 2012/11/06 ⋅ 0

(译)在ASP.NET Web API中使用Redis

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

jieqiuming ⋅ 2014/05/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部