文档章节

ServiceStack 项目实例 004 建立第一个服务--添加信息

AA海纳百川
 AA海纳百川
发布于 2016/10/02 11:55
字数 737
阅读 199
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

    下面我建立一个服务的Operation,实现添加一条信息的功能,在SOA模式开发中,Operation相当于MVC框架中的一个Action,但是SOA服务中是没有视图层和显示页面的,它对外提供的是数据服务,通常为XML或JSON格式。

 

    这个功能实现需要在三个文件中分别添加代码:

 

     在SS服务端项目中添加一个类文件Submission.cs , 其中定义Submission类和SubmissionResponse类:

1

2

3

4

5

6

7

8

9

10

11

12

13

[Route("/Submission""POST")]

    public class Submission

    {

        [AutoIncrement]

        public int Id { getset; }

        public DateTime SubmissionTime { getset; }

        public string Headline { getset; }

        public string Body { getset; }

    }

    public class SubmissionResponse

    {

        public int Id { getset; }

    }

 

    Submission类是一个实体类,对应数据库中的表,其中[AutoIncrement]是主键字段的标记,SubmissionResponse是出口类,用来返回一个整形值,这个整形值返回新增的记录的ID。

 

    添加一个SubmissionService.cs类,这个类中定义一个服务,用来添加一条新闻。

1

2

3

4

5

6

7

8

9

 public class SubmissionService : Service

    {

        public DataRepository Repo { getset; }

        public object Any(Submission submission)

        {

            int id = Repo.AddSubmission(submission);

            return new SubmissionResponse() {Id = id};

        }

    }

 

   DataRepository 是注入的数据库服务类,这个类的定义在DataRepository.cs中(后面将说明这个类),在服务类文件定义中,包含有三个关键的和接口相关的项,

1

public object Any(Submission submission)

    其中的object是出口类,也就是服务响应用户的请求后,返回给客户端的数据,这个数据是强类型的,可以在客户端自动转换为JSON、JSV、XML等格式。object可以返回任意类型数据,建议写成实际的数据类型,可以提高性能和可读性,这里实际的返回类型是SubmissionResponse,也就是出口类指定的数据类型。

  Any 是允许的HTTP请求类型,支持的类型有GET、POST、PUT和DELETE以及PATCH等,对应的数据库访问功能分别为读取、添加、修改和删除,Any表示支持所有类型操作,如果明确这项操作的类型,要求写成实际的操作类型。

   传入的参数Submission submission是入口类数据,对于新增和修改操作,一般入口类是实体类,对应会操作数据库的一个表。这里通过 Submission 操作数据库中的Submission 表。

 

    服务和入口出口类的说明图:

 

    wKioL1SEGayAb4WzAAITLyPbvFw290.jpg

(注:图中的服务和类和代码中的并不是同一个,这里主要是用作结构和用法的说明)

 

    3   添加DataRepository.cs数据库访问类,在该类中添加一个IDbConnectionFactory 类型的属性,和添加新闻的服务。

1

2

3

4

5

6

7

8

9

10

11

        public IDbConnectionFactory DbConnectionFactory { getset; }

        //public IDbConnectionFactory DbFactory { get; set; }

        public int AddSubmission(Submission request)

        {

            using (var db = DbConnectionFactory.OpenDbConnection())

            {

                db.CreateTable<Submission>();

                db.Insert(request);

                return (int) db.GetLastInsertId();

            }

        }

     

 

   主要参考资料 :  Getting Started with ASP.NET MVC, ServiceStack and Bootstrap

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

AA海纳百川
粉丝 6
博文 53
码字总数 4829
作品 0
南宁
程序员
私信 提问
加载中

评论(0)

ServiceStack 简单使用

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

麦田守望者LEO
2018/07/23
0
0
使用ServiceStack构建Web服务

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

yangecnu
2014/09/09
0
0
浅谈WebService的版本兼容性设计

在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform、WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所有这些客户端的需求,实现...

yangecnu
2014/11/03
0
0
ServiceStack.Redis 请求次数6000次异常

原文:ServiceStack.Redis 请求次数6000次异常 Redis是一个非常NB的内存级的数据库,我们可以把很多”热数据“(即读写非常多的数据)放入其中来操作,这样就减少了和关系型数据库(如SqlServ...

osc_iz97ycwh
2018/04/09
4
0
NuGet:ServiceStack

ylbtech-NuGet:ServiceStack ServiceStack is a simple and fast alternative to WCF, MVC and Web API in one cohesive framework for all your services and web apps that's intuitive ......

storebook
04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

@Pointcut()的execution、@annotation等参数说明

AOP的基本概念 Advice(通知、切面): 某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。 @Before: 标识一个前置增强方法,相当于BeforeAdvice的...

dean_
13分钟前
7
0
是否finally块总是用Java执行? - Does a finally block always get executed in Java?

问题: Considering this code, can I be absolutely sure that the finally block always executes, no matter what something() is? 考虑到这段代码,我能绝对确定无论something()是final......

技术盛宴
30分钟前
15
0
Wiz — Hyperledger Fabric快速开发工具箱

Wiz工具箱可以快速搭建一个Hyperledger Fabric开发网络作为链码和应用开发环境,官方下载地址:http://sc.hubwiz.com/codebag/fabric-wiz/。 Wiz工具箱的主要特性如下: 内置原生Fabric 1.4 ...

区块链教程
34分钟前
7
0
基于自定义注解和SpringEL表达式的分布式锁实现

需求 1、项目中不可避免的需要使用分布式保证幂等。所以一个简单可靠,易用的工具提上日程。 2、演进过程 最开始使用try finally 块实现。代码臃肿。还要时刻记得释放。 改用回调方式封装锁的...

Lien6o
43分钟前
31
0
前后端分离配置token

解决跨域请求: import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframe......

冥焱
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部