目录

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. libcurl多线程超时设置不安全(转)

    from http://www.cnblogs.com/kex1n/p/4135263.html (1), 超时(timeout) libcurl 是 一个很不错的库,支持http,ftp等很多的协议 ...

  2. C# 关于时间

    1.2016/7/8 00:10:10 转换成 2016-07-08T 00:10:10 在用VB动态调用WevService的时候,传入的时间格式为2016/7/8 00:10:10,导致调用出错, ...

  3. iOS定位到崩溃代码行数

    不知道大家是不是在代码调试过程中经常遇到项目崩溃的情况: 比如: 数组越界: 没有实现方法选择器: 野指针: 还有很多很多情况.......昨天学到了一种可以直接定位到崩溃代码行数的一个命令,记录一下 ...

  4. Windows 下, SetTimer 定时器的研究.

    一直很困惑一个问题: 我设置了一个10秒的定时器,可是被调用的函数要花费30秒, 那待调用的函数第二次是什么时候调用的呢? 20秒, 40秒, 还是50秒呢.... 所以我进行了实验. 我写了一个类  ...

  5. css加阴影

    box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.1); -webkit-box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.1); -m ...

  6. java多线程学习-ThreadLocal

    为了凑字,把oracle文档里介绍ThreadLocal抄过来 public class ThreadLocal<T> extends Object This class provides ...

  7. 技术英文单词贴--D

    D detail 细节,详情 deploy 配置,部署

  8. iOS.StaticLibrary.1-avoid-duplicate-symbol-in-static-library[draft]

    Avoid duplicate symbol in static library and its customer 发布static library给使用者使用.在实际的工程实践中,iOS静态库一般会 ...

  9. Til the Cows Come Home

    Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...

  10. Tempter of the Bone---hdu1010(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 折磨我一下午 题目大意: 从s点走到d点能否恰好走k步   刚开始以为是广搜,其实是深搜. dfs多优化一 ...