目录

ServiceStack 概念

ServiceStack Web Service 创建与调用简单示列

上篇文章介绍了ServiceStack是什么,本章进入主题,如何快速简单的搭建ServiceStack服务环境和调用。

ServiceStack服务搭建

服务的搭建有两种方法,我会一一介绍。

第一种方法如下:

1.创建网站项目

2.安装发布组件

packages.confing文件为您提供每一个ServiceStack dll 的版本和运行时信息。

定义是 ServiceStack <Ticket> 请求数据契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack; namespace Model
{
/// <summary>
/// 创建票据 请求实体
/// </summary>
public class TicketRequest : IReturn<TicketResponse>
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
}
public class TicketDeleteRequest
{
public int TicketId { get; set; }
}
}

定义ServiceStack <Ticket> 响应数据契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Model
{
/// <summary>
/// 创建票据响应数据实体
/// </summary>
public class TicketResponse
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
public List<OrderResponse> Orders { get; set; }
public DateTime Timestamp { get; set; }
}
/// <summary>
/// 票据所属订单
/// </summary>
public class OrderResponse
{
public int OrderId { get; set; }
}
}

定义ServiceStack 接口方法

using Model;
using System.Collections.Generic; namespace Interface
{
public interface ITicketService
{
/// <summary>
/// 方法请求模式和路由规则 后面再说
/// 请求票据列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
List<TicketResponse> Any(TicketRequest request);
/// <summary>
/// 删除指定票据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
bool POST(TicketDeleteRequest deleteid);
}
}

实现ServiceStack 接口方法

using Interface;
using Model;
using System;
using System.Collections.Generic; namespace Service
{
public class TicketService : ServiceStack.Service, ITicketService
{
/// <summary>
/// 方法请求模式和路由规则 后面再说
/// 请求票据列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public List<TicketResponse> Any(TicketRequest request)
{
List<TicketResponse> result = new List<TicketResponse>();
List<OrderResponse> orderlist = new List<OrderResponse>();
orderlist.Add(new OrderResponse() { OrderId = });
result.Add(new TicketResponse()
{
Orders = orderlist,
ServerId = ,
TableNumber = ,
TicketId = ,
Timestamp = DateTime.Now
});
result.Add(new TicketResponse()
{
Orders = orderlist,
ServerId = ,
TableNumber = ,
TicketId = ,
Timestamp = DateTime.Now
}); return result;
}
/// <summary>
/// 删除指定票据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public bool POST(TicketDeleteRequest deleteid)
{
return true;
}
}
}

实现ServiceStack服务宿主

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Service.Host
{
public class TickServiceHost : ServiceStack.AppHostBase
{
// Register your Web service with ServiceStack.
public TickServiceHost()
: base("Ticket Service", typeof(Service.TicketService).Assembly) { }
public override void Configure(Funq.Container container)
{
// Register any dependencies your services use here.
}
}
}

启动ServiceStack服务宿主

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
new Service.Host.TickServiceHost().Init();
} void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码 } void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不引发该事件。 } </script>

添加ServiceStack网站集成配置

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<!--Required for IIS (and above) -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*.aspx" name="DefaultHttpApplication" type="System.Web.UI.PageHandlerFactory" verb="*" />
<add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
</handlers>
</system.webServer>
</configuration>

至此ServiceStack服务已经完成,运行程序可以看到界面如下,其中TicketRequest和TicketDeleteRequest可以理解成实际的调用方法,里面定义的参数可以理解成方法的请求参数,后续调用会继续讲解

整个项目解决方案的框架如下:

第二种创建方法比较简单,快速,利用ServiceStack官方提供的模板直接生成,具体操作方法如下:

1.打开VS,工具扩展和更新

2.搜索servicestack提供的组件

3.安装完成后创建新项目,来自模板

创建完成后的项目框架如下

5.改成我们所需要的

ServiceStack客户端调用

using ConsoleApplication1.model;
using ServiceStack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//客户端采用json数据格式
JsonServiceClient client1 = new JsonServiceClient("http://localhost:32617/");
Console.WriteLine("http://localhost:32617/");
//TicketRequest 为请求的方法
List<TicketResponse> responseSearch = client1.Get<List<TicketResponse>>(new TicketRequest() { TicketId = });
Console.WriteLine(responseSearch.Count); bool responseDelete = client1.Post<bool>(new TicketDeleteRequest() { TicketId = });
Console.WriteLine(responseDelete); Console.WriteLine("http://localhost:36107/"); List<TicketResponse> responseSearch1 = client1.Get<List<TicketResponse>>(new TicketRequest() { TicketId = });
Console.WriteLine(responseSearch1.Count); bool responseDelete1 = client1.Post<bool>(new TicketDeleteRequest() { TicketId = });
Console.WriteLine(responseDelete1); Console.ReadLine();
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1.model
{
/// <summary>
/// 创建票据 请求实体
/// IReturn<TicketResponse> 指该方法返回的数据实体
/// </summary>
public class TicketRequest
{
public int TicketId { get; set; }
public int TableNumber { get; set; }
public int ServerId { get; set; }
}
public class TicketDeleteRequest
{
public int TicketId { get; set; }
}
}

浏览器端调用:

请求URL如下:

浏览器输入http://localhost:36107/json/reply/TicketRequest?TicketId=1

浏览器默认请求为GET,如果方法定义POST请求类型,可以采用第三方模拟Rest请求工具

参考:

https://servicestack.net/features

https://msdn.microsoft.com/zh-cn/magazine/dn342871.aspx

http://www.cnblogs.com/shanyou/p/3348347.html

http://www.cnblogs.com/yangecnu/p/Introduce-ServiceStack.html

作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/5012947.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

本文为新手试写,如果有问题,欢迎博友指正,在下不甚感激,后续还会继续更新ServiceStack其他相关文章。

ServiceStack Web Service 创建与调用简单示列的更多相关文章

  1. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  2. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  3. [SAP] 外部系统调用SAP web service用户验证的简单方法

    场景: 一个Java系统调用SAP系统提供的web service,除了根据WSDL生成的代理类,调用相应方法,传入相应参数外,还等需要使用SAP提供的用户信息进行身份验证,最简单的方法是在soap请 ...

  4. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  5. ASP.NET WEB SERVICE 创建、部署与使用

    PS: 开发工具 VS2010, 所有工程都为Debug状态,本人刚接触 Web Service,此文为菜鸟入门用例,高手勿笑! 转载请注明出处 :http://www.cnblogs.com/yyc ...

  6. 建立Web Service 接口及调用

    WEB SERVICE 接口: [WebMethod] public string MaterialRequest(string jsonText) { string WorkNo; string P ...

  7. web service client端调用服务器接口

    打开项目的web service client 其中wsdl URL    http://www.51testing.com/html/55/67755-848510.html 去这里面查找一些公开的 ...

  8. java web 工程创建及servlet简单使用

    1.java web工程创建 (1)File--->new--->project (2)选择java enterprise,按照下图操作 (3)点击next后,会进入如下界面,修改工程名后 ...

  9. 使用 PHP SOAP 来创建一个简单的 Web Service。

    访问: http://www.debug.com/php-soap-demo.php?client=22 结果: apache: <VirtualHost _default_:80> Do ...

随机推荐

  1. Selenium2+python自动化26-js处理内嵌div滚动条

    前言 前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦. 一.内嵌滚动条 1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相.

  2. [aspx]控件及代码小例

    1. 原生 asp 方式遍历 DataTable  2. aspx 的控件 Repeater 后台绑定 <%-- DataTable dt = OleDbHelper.GetTable(&quo ...

  3. HTML5和CSS3基础教程(第8版)-读书笔记(3)

    第11章 用CSS 进行布局 网站设计主要有两大类型:固定宽度和响应式. 对于固定(fixed)布局,整个页面和每一栏都有基于像素的宽度.顾名思义,无论是使用移动电话和平板电脑等较小的设备查看页面,还 ...

  4. Android--多线程之Handler(转)

    前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的 ...

  5. 【随笔】ARP和RARP

    ARP协议是什么? ARP协议是"Address Resolution Protocol"(地址解析协议)的缩写.在局域网中,网络中实际传输的是"帧",帧里面是 ...

  6. mysql 字符串处理优化

    周五下午,同事突然说有个存储过程要帮忙优化,就拿来看看,大概看了下: 数据库端需求:数据库中要存储一个AppID字段,对应一个Account可以自行设置自己的AppID(我就不从业务上多说了), 以前 ...

  7. windows server 2008 - 创建域和本机用户

    /* * ===================================================================================== * Filenam ...

  8. [Chapter 3 Process]Practice 3.5 When a process creates a new process using the fork() operation

    3.5 When a process creates a new process using the fork() operation, which of the following state is ...

  9. C# 根据身份证号码获取简易信息

    public class PackIden { /// <summary> /// 根据身份证获取生日 /// </summary> /// <param name=&q ...

  10. ubuntu 14.04 unity 管理工具 unity-tweak-tool

    安装方式: sudo apt-get update sudo apt-get install unity-tweak-tool 用于更改字体,修改状态,disable 亚马逊的搜索等 功能.很好用