目录

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. web.py+mysql插入中文提示query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-100

    对于中文编码的问题,总会出现各种各样恶心的错误,还不知道应该怎么解决,首先,你从最开头就应该关注编码问题,尽量保证所有的编码方式都是一致的 用python+web.py+mysql来写程序,首先要保证 ...

  2. Abstract Factory(抽象工厂)模式

    1.意图 提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类. 2.适用性 一个系统要独立于它的产品创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你强调一系列相关 ...

  3. Selenium2+python自动化15-select下拉框

    前言 最近由于工作原因,更新慢了一点,今天终于抽出一点时间给大家继续更新selenium系列,学习的脚本不能停止,希望小伙伴能多多支持. 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关 ...

  4. iOS工作笔记(十四)

    1.scrollview的frame指的是其可视范围,contentSize指的是其滚动范围,分别是在水平方向和竖直方向上的 所以要让scrollview在水平方向不能滚动,那么需要如下设置 _scr ...

  5. 转发(request.setRequestDispacter)和重定向(response.sendRedirect)的区别以及转发的include和forward的区别

    //response 重定向的时候,url是会跳转到新的页面的,输入的地址要包含项目名(可以跳到项目之外的页面,比如百度)//request 请求转发的时候,url是不会跳转到新页面的,输入的地址不包 ...

  6. Python:迭代器

    迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器. 可迭代对象:可以直接作用于for循环的对象. 基本方法:iter()和next() 迭代器创建: 例1: list = ['a' ...

  7. React Developer Tools 安装小提示

    1,在google市场里边,安装React Developer Tools之后,发现是开启的,但是按下F12后,并没有发现react选项 2,后来通过查资料,发现必须是运行react项目的时候,才出现 ...

  8. iOS支持图文混排的按钮(UIButton)

    创建UIButton子类 直接上代码了 .h文件 创建UIButton子类 直接上代码了 .h文件 #import <UIKit/UIKit.h> @interface GraphicBt ...

  9. JS 插件使用

    1.时间控件的使用 My97DatePicker WdatePicker({ minDate: '%y-%M-{%d}'}) 默认当前日期以后 LoanMessage.LoanAppAgentMode ...

  10. 搜索结果高亮显示(不改变html标签)

      分类: 代码2010-02-28 13:44 1574人阅读 评论(3) 收藏 举报 htmlinputstring 一.问题的产生 搜索结果高亮显示,在新闻标题,来源之类的地方好做,只需要用st ...