1:定义数据实体

因为ServiceStack是基于请求参数来定义请求路由的,所以关键的是请求参数一定要定义好,同时可以在请求参数上自定义路由名和请求方式,作为对外接口名

上代码:

namespace ServiceStack_Moudel
{
public class Ticket
{
public int TicketId { get; set; }
public string Name { get; set; }
} [Route("/allticket","Get,Post")]
public class GetAllTicketsInQueueRequest
{
public string name { get; set; }
} [Route("/ticket","Post")]
public class QueueTicketRequest
{
public string name2 { get; set; }
} [Route("/pull","Get")]
public class PullTicketRequest
{
public string name3 { get; set; }
}
}

2:接口实现

接口和实现类,这革不赘述了,其实我觉得简单项目的话,接口层是完全没有必要的,完全是冗余,注意的是要实现你的接口(如果有的话),继承Service(必须要,这是核心),请求和返回参数就用刚才定义的那些就可以,另外 接口名 Any表示什么请求方式都接受,也可以用Get或Post作为方法名,这样只会接受指定的请求方式,请求方式不对会抛异常

 public class TicketService : Service, ITicketService
{
public List<Ticket> Any(GetAllTicketsInQueueRequest request)
{
var ticketList = new List<Ticket>();
for (int i = ; i < ; i++)
{
var ticket = new Ticket { Name = i.ToString(), TicketId = i + };
ticketList.Add(ticket);
}
return ticketList;
} public string Any(QueueTicketRequest request)
{
return "query ticket successfully!";
} public Ticket Any(PullTicketRequest request)
{
var ticket = new Ticket { Name = "pull successfully!", TicketId = };
return ticket;
}
}
    public interface ITicketService
{
List<Ticket> Any(GetAllTicketsInQueueRequest request); string Any(QueueTicketRequest request); Ticket Any(PullTicketRequest request);
}

3:准备Host 部署

这边分两种场景部署,一是Host在控制台程序,另一种是IHost在IIS

3.1 Host 控制台

Host控制台 继承的是AppSelfHostBase 这个类

    class Program
{
static void Main(string[] args)
{
var listeningOn = args.Length == ? "http://*:1337/" : args[];
var appHost = new TicketServiceHost()
.Init()
.Start(listeningOn); Console.WriteLine("AppHost Created at {0}, listening on {1}",
DateTime.Now, listeningOn);
Console.ReadKey(); }
}

Host类

    public class TicketServiceHost : AppSelfHostBase
{
/// <summary>
/// Default constructor.
/// Base constructor requires a name and assembly to locate web service classes.
/// </summary>
public TicketServiceHost()
: base("Ticket Service", typeof(TicketService).Assembly)
{ } /// <summary>
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// </summary>
/// <param name="container"></param>
public override void Configure(Container container)
{ }
}

运行控制台程序,然后打开localhost:1337就会看到下图,表明Host成功,服务可以使用了。

3.2 Host在IIS

Host在IIs 继承的是AppHostBase类

    public class TicketServiceHost : AppHostBase
{
//Register your web service with ServiceStack.
public TicketServiceHost()
: base("Ticket Service", typeof(TicketService).Assembly)
{ } public override void Configure(Funq.Container container)
{
//Register any dependencies your services use here.
}
}

在Global.asax中 初始化服务

    public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
new TicketServiceHost().Init();
}
}

结束后编译下,把这个Web项目部署在IIS上,直接启动就可以看到如下图,说明成功了

  

4:测试

调用地址就使用他推荐的方式就可以,或者使用我们自定义的别名也行,可以指定返回的数据格式,有以下几种方式,感兴趣的可以把json换成xml试试看

1: http://localhost:8083/json/reply/GetAllTicketsInQueueRequest?name=123456

2: http://localhost:8083/allticket.json?name=12345678

3: http://localhost:8083/allticket?name=123456&format=json

简单的总结了一下,也希望对大家有帮助

对了 差点忘了,一个非常重要的点,就是Host在IIS的话,webconfig一定要增加ServiceStack节点,我就是因为没有增加节点,导致一直Host不成功

  <system.webServer>
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
</handlers>
</system.webServer>

增加这个节点就大功告成了!

5:附带项目结构

ServiceStack 简单服务搭建的更多相关文章

  1. ServiceStack.Hello——跨平台.net REST api服务搭建

    ServiceStack.Hello--跨平台.net REST api服务搭建 自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Cre ...

  2. Dubbo学习之简单环境搭建

    Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...

  3. Wcf Restful Service服务搭建

    目的 使用Wcf(C#)搭建一个Restful Service 背景 最近接到一个项目,客户要求使用Restful 方式接收到数据,并对数据提供对数据的统计显示功能,简单是简单,但必须要使用Restf ...

  4. NTP服务搭建

    1:实验环境 前提条件:虚拟机环境,windows 客户端,关闭防火墙:linux 服务器关闭防火墙,关闭selinux. Cent OS :NTP服务器 IP: 192.168.80.134  /2 ...

  5. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  6. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  7. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  8. NodeJs之服务搭建与数据库连接

    NodeJs之服务搭建与数据库连接 一,介绍与需求分析 1.1,介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻 ...

  9. 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回

    今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...

随机推荐

  1. Linux进程管理:后台启动进程和任务管理命令

    一.为什么要使程序在后台执行 我们的应用有时候要运行时间很长,如:几个小时甚至几个星期,我们可以让程序在后台一直跑. 让程序在后台运行的好处有: 终端关机不影响后台进程的运行.(不会终端一关机或者网络 ...

  2. maven入门(9)Maven常用命令

    Maven常用命令 清理 clean编译 compile打包 package安装 install跳过测试 clean package -Dmaven.test.skip=true

  3. HTTP协议扫盲(一)HTTP协议的基本概念和通讯原理

    一.HTTP协议的概念 1.引子  - 从url开始 URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下 schema://host[:port# ...

  4. 我对let和const理解

    ​let和const是es6新出的两种变量声明的方式,接下来我来分别针对这两个,聊一聊. let ​let它的出现,我认为主要是解决了块级作用域的需求.因为js以前本身是没有什么块级作用域的概念的(顶 ...

  5. R数据分析 第一篇:温习概率论

    概率论是人们在长期实践中发现的理论,是客观存在的.自然界和社会上发生的现象是多种多样的,有一类现象,在一定条件下必然发生,称作确定性现象,而概率论研究的现象是不确定性现象,嗯嗯,醒醒,概率论研究的对象 ...

  6. Modelsim的使用——复杂的仿真

    相对于简单的仿真,复杂的仿真是指由多个文件.甚至调用了IP核.使用tcl脚本进行的仿真.其实仿真步骤跟图形化的差不多,只不过每一步用脚本写好,然后再在软件里面run一下,主要过程就是: 1.准备好各种 ...

  7. [SHOI2009] 会场预约 - Treap

    Description PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也 ...

  8. C#:多进程开发,控制进程数量

    正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下: System.Threading.Tasks.Task task=System.Threading.Tasks.Task. ...

  9. Git -> Can't start Git: git.exe

    问题描述 导入别人的PyCharm项目后提示:Can't start Git:git.exe 解决办法 Git就是个类似插件,在Git的官网上注册个账号然后每次编译就会自动把程序上传到网上备份.可以方 ...

  10. Python系列之 - 上下文管理协议

    with obj as f: '代码块' 1.with obj ---->触发obj.__enter__(),拿到返回值 2.as f----->f=返回值. 3.with obj as ...