ServiceStack Web Service 创办与调用简单示列
目录
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 = 1 }); result.Add(new TicketResponse() { Orders = orderlist, ServerId = 1, TableNumber = 1, TicketId = 1, Timestamp = DateTime.Now }); result.Add(new TicketResponse() { Orders = orderlist, ServerId = 2, TableNumber = 2, TicketId = 2, 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 7 (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 = 1 }); Console.WriteLine(responseSearch.Count); bool responseDelete = client1.Post<bool>(new TicketDeleteRequest() { TicketId = 1 }); Console.WriteLine(responseDelete); Console.WriteLine("http://localhost:36107/"); List<TicketResponse> responseSearch1 = client1.Get<List<TicketResponse>>(new TicketRequest() { TicketId = 1 }); Console.WriteLine(responseSearch1.Count); bool responseDelete1 = client1.Post<bool>(new TicketDeleteRequest() { TicketId = 1 }); 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其他相关文章。
- 13楼假正经哥哥
- 这套组件 是不错, 可惜4.0之后收费了。。慢慢要放弃了,不过源码可以好好学习学习
- Re: 释迦苦僧
- @假正经哥哥,是的 可惜啦,我想知道为啥有人点反对 ,请高手指点下
- 12楼童2
- 可惜没有破解啊。
- Re: 释迦苦僧
- @童2,可以下源代码破解
- 11楼cuibty
- servicestack 直接在V4收费,老子也是罪了。
- Re: 释迦苦僧
- @cuibty,可以下载源代码破解
- 10楼阳光遐想
- 很棒棒,学习学习!!
- 9楼释迦苦僧
- 我想知道为啥会有人反对 是我说的是哪一点?我已注明是新手试写,如果点反对,还希望你们说明原因!!!
- 8楼笋干
- 你们买了V4的授权?还是破解?
- Re: 释迦苦僧
- @笋干,破解需要源码 ,V4是收费的 V3是不收费的,破解我看后面能不能搞
- Re: 释迦苦僧
- @笋干,帮我点赞
- 7楼释迦苦僧
- 大家看完 麻烦随手点赞
- 6楼zzhi.wang
- 收费 绕道……
- 5楼掘墓者
- 大神盼 盼大神
- Re: 释迦苦僧
- @掘墓者,您是?
- 4楼河蟹社会
- 群主 V3 的版本有下载地址吗, 我找到的是V1的版本, V4的版本有些功能有限制
- 3楼victor596
- servicestack真心不错
- Re: 释迦苦僧
- @victor596,看样子大家都用过,12年就出来的东西
- Re: 释迦苦僧
- @victor596,帮我点赞
- 2楼王一一
- 每个服务都要写个 Request,如何解决呢?
- Re: 释迦苦僧
- @王一一,是每个方法都需要 你可以定义个action标识
- 1楼liyunzhi
- 我没点反对= =,反对可能是因为 感觉这东西并没有什么软用
- Re: 释迦苦僧
- @liyunzhi,6个反对 心里不是滋味