目录

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. Spring RMI (Spring 远程方法调用)

    所需jar包...?    不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy 先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成j ...

  2. tomcat各种问题汇总

    1. 让Tomcat支持中文路径名和中文文件名 因为内置get协议中的URL编码都是ISO-8859-1,所以需要我们强制编码,在tomcat/conf/Server.xml中添加URIEncodin ...

  3. 管道导致的while循环体变量失效

    #!/bin/sh num= cat /etc/passwd | while read line do num=$(($num+)) done echo $num linux:~ # sh a.sh ...

  4. js抽奖

    http://www.aichengxu.com/view/64369 <!Doctype html><html><head><meta http-equiv ...

  5. 【Mysql】权限管理

    mysql权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表. mysql权限表的验证过程为: 1.先从user表中的Host, ...

  6. sqlite数据库中 保存和读取UIData对象

    + (void)getPersonByID:(int)ID { sqlite3 *db = [DB open]; sqlite3_stmt *stmt = nil; int result = sqli ...

  7. [PHP] php实现文件下载

    1. 设置超链接的href属性 <a href="文件地址"></a> 如果浏览器不能解析该文件,浏览器会自动下载.而如果文件是图片或者txt,会直接在浏览 ...

  8. Meta标签以及viewport

    meta是meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和http-equiv. name属性主要作用:对应 ...

  9. C# async await 学习笔记2

    C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...

  10. MS对WCF配置中security节点的解释

    摘录地址:http://msdn.microsoft.com/zh-CN/library/azure/ms731347 <basicHttpBinding> 的 <security& ...