目錄
ServiceStack 概念
ServiceStack Web Service 創(chuàng)建與調(diào)用簡單示列
上篇文章介紹了ServiceStack是什么,本章進(jìn)入主題,如何快速簡單的搭建ServiceStack服務(wù)環(huán)境和調(diào)用。
ServiceStack服務(wù)搭建
服務(wù)的搭建有兩種方法,我會一一介紹。
第一種方法如下:
1.創(chuàng)建網(wǎng)站項(xiàng)目
2.安裝發(fā)布組件
packages.confing文件為您提供每一個(gè)ServiceStack dll 的版本和運(yùn)行時(shí)信息。
定義是 ServiceStack <Ticket> 請求數(shù)據(jù)契約
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ServiceStack;namespace Model{ /// <summary> /// 創(chuàng)建票據(jù) 請求實(shí)體 /// </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> 響應(yīng)數(shù)據(jù)契約
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Model{ /// <summary> /// 創(chuàng)建票據(jù)響應(yīng)數(shù)據(jù)實(shí)體 /// </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> /// 票據(jù)所屬訂單 /// </summary> public class OrderResponse { public int OrderId { get; set; } }}
定義ServiceStack 接口方法
using Model;using System.Collections.Generic;namespace Interface{ public interface ITicketService { /// <summary> /// 方法請求模式和路由規(guī)則 后面再說 /// 請求票據(jù)列表 /// </summary> /// <param name="request"></param> /// <returns></returns> List<TicketResponse> Any(TicketRequest request); /// <summary> /// 刪除指定票據(jù) /// </summary> /// <param name="request"></param> /// <returns></returns> bool POST(TicketDeleteRequest deleteid); }}
實(shí)現(xiàn)ServiceStack 接口方法
using Interface;using Model;using System;using System.Collections.Generic;namespace Service{ public class TicketService : ServiceStack.Service, ITicketService { /// <summary> /// 方法請求模式和路由規(guī)則 后面再說 /// 請求票據(jù)列表 /// </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> /// 刪除指定票據(jù) /// </summary> /// <param name="request"></param> /// <returns></returns> public bool POST(TicketDeleteRequest deleteid) { return true; } }}
實(shí)現(xiàn)ServiceStack服務(wù)宿主
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服務(wù)宿主
<%@ application Language="C#" %><script runat="server"> void Application_Start(object sender, EventArgs e) { // 在應(yīng)用程序啟動時(shí)運(yùn)行的代碼 new Service.Host.TickServiceHost().Init(); } void Application_End(object sender, EventArgs e) { // 在應(yīng)用程序關(guān)閉時(shí)運(yùn)行的代碼 } void Application_Error(object sender, EventArgs e) { // 在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼 } void session_Start(object sender, EventArgs e) { // 在新會話啟動時(shí)運(yùn)行的代碼 } void Session_End(object sender, EventArgs e) { // 在會話結(jié)束時(shí)運(yùn)行的代碼。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式設(shè)置為 // InPRoc 時(shí),才會引發(fā) Session_End 事件。如果會話模式設(shè)置為 StateServer // 或 SQLServer,則不引發(fā)該事件。 } </script>
添加ServiceStack網(wǎng)站集成配置
<?xml version="1.0" encoding="utf-8"?><!-- 有關(guān)如何配置 asp.net 應(yīng)用程序的詳細(xì)信息,請?jiān)L問 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服務(wù)已經(jīng)完成,運(yùn)行程序可以看到界面如下,其中TicketRequest和TicketDeleteRequest可以理解成實(shí)際的調(diào)用方法,里面定義的參數(shù)可以理解成方法的請求參數(shù),后續(xù)調(diào)用會繼續(xù)講解
整個(gè)項(xiàng)目解決方案的框架如下:
第二種創(chuàng)建方法比較簡單,快速,利用ServiceStack官方提供的模板直接生成,具體操作方法如下:
1.打開VS,工具擴(kuò)展和更新
2.搜索servicestack提供的組件
3.安裝完成后創(chuàng)建新項(xiàng)目,來自模板
創(chuàng)建完成后的項(xiàng)目框架如下
5.改成我們所需要的
ServiceStack客戶端調(diào)用
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數(shù)據(jù)格式 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> /// 創(chuàng)建票據(jù) 請求實(shí)體 /// IReturn<TicketResponse> 指該方法返回的數(shù)據(jù)實(shí)體 /// </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; } }}
瀏覽器端調(diào)用:
請求URL如下:
瀏覽器輸入http://localhost:36107/json/reply/TicketRequest?TicketId=1
瀏覽器默認(rèn)請求為GET,如果方法定義POST請求類型,可以采用第三方模擬Rest請求工具
參考:
https://servicestack.net/features
https://msdn.microsoft.com/zh-cn/magazine/dn342871.aspx
http://www.survivalescaperooms.com/shanyou/p/3348347.html
http://www.survivalescaperooms.com/yangecnu/p/Introduce-ServiceStack.html
作者:釋迦苦僧 出處:http://www.survivalescaperooms.com/woxpp/p/5012947.html 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
本文為新手試寫,如果有問題,歡迎博友指正,在下不甚感激,后續(xù)還會繼續(xù)更新ServiceStack其他相關(guān)文章。
新聞熱點(diǎn)
疑難解答
圖片精選