目錄
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 = 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其他相關文章。
作者:釋迦苦僧
出處:http://www.cnblogs.com/woxpp
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。
生活不易,五行缺金,求打點