文档章节

ServiceStack 项目实例 008 ServiceStack.Examples - 2

丁川
 丁川
发布于 2016/10/02 12:05
字数 773
阅读 29
收藏 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
redis在windows下面运行稳定吗?

有没有人在实际项目上将redis运行在windows下面? 因为redis官方不支持win,github上面的ServiceStack是微软搞出来的。 不知道大家在实际项目中应用的效果怎么样?...

孙小东
2015/08/12
2.6K
6
ServiceStack 4.5.10 发布,.NET Web 服务框架

ServiceStack 4.5.10 已发布,Service Stack 是一个高性能的 .NET Web 服务框架,简化了开发 XML、JSON、JSV 和 WCP SOAP Web 服务。它定义了符合 Martin Fowlers 数据传输对象模式,这是一个...

王练
2017/06/11
1K
2
ServiceStack v4.5.4 发布,支持 .NET Core

ServiceStack v4.5.4 发布了,该版本是一个针对 v4.5.2 的快速修复版本,修复了一些NuGet包的问题。 Service Stack 是一个高性能的 .NET Web 服务框架,简化了开发 XML、JSON、JSV 和 WCP SO...

王练
2016/10/24
2.4K
13
ServiceStack做WebApi服务器的问题

ServiceStack做WebApi服务器时怎样获取客户端访问者的IP信息,客户端请求过来的数据流信息? 我使用Request.UserHostAddress获取到的是 "[::1]:8888" (我开的端口号是8888), 数据流信息Req...

89655408
2016/01/13
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

教你React Native使用fetch实现图片上传

这篇文章主要介绍了详解react关于事件绑定this的四种方式,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 在react组件中,每个方...

前端攻城老湿
2分钟前
0
0
webpack+vuex+axios 跨域请求数据的示例

本篇文章主要介绍了webpack+vuex+axios 跨域请求数据,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 使用vue-li 构建 webpack项...

前端攻城小牛
6分钟前
0
0
基础编程题目集-6-10 阶乘计算升级版

本题要求实现打印非负整数阶乘,其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。 输入格式: 每个输入包含一个测试...

niithub
7分钟前
0
0
聊聊flink的FsStateBackend

序 本文主要研究一下flink的FsStateBackend StateBackend flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBackend.java @PublicEvolvingpublic interface Sta......

go4it
36分钟前
1
0
webpack配置proxyTable时pathRewrite无效的解决方法

webpack配置接口地址代理 在项目开发中,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 ...

前端小攻略
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部