天天看點

ServiceStack Web Service 建立與調用簡單示列

目錄

ServiceStack 概念

ServiceStack Web Service 建立與調用簡單示列 

上篇文章介紹了ServiceStack是什麼,本章進入主題,如何快速簡單的搭建ServiceStack服務環境和調用。

ServiceStack服務搭建

服務的搭建有兩種方法,我會一一介紹。

第一種方法如下:

1.建立網站項目

ServiceStack Web Service 建立與調用簡單示列
2.安裝釋出元件
ServiceStack Web Service 建立與調用簡單示列
ServiceStack Web Service 建立與調用簡單示列
ServiceStack Web Service 建立與調用簡單示列

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 Web Service 建立與調用簡單示列

整個項目解決方案的架構如下:

ServiceStack Web Service 建立與調用簡單示列

第二種建立方法比較簡單,快速,利用ServiceStack官方提供的模闆直接生成,具體操作方法如下:

1.打開VS,工具擴充和更新

ServiceStack Web Service 建立與調用簡單示列

2.搜尋servicestack提供的元件

ServiceStack Web Service 建立與調用簡單示列

3.安裝完成後建立新項目,來自模闆

ServiceStack Web Service 建立與調用簡單示列

建立完成後的項目架構如下

ServiceStack Web Service 建立與調用簡單示列

5.改成我們所需要的

ServiceStack Web Service 建立與調用簡單示列

 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();
        }
    }
}      
ServiceStack Web Service 建立與調用簡單示列
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; }
    }
}      

浏覽器端調用:

ServiceStack Web Service 建立與調用簡單示列

請求URL如下:

ServiceStack Web Service 建立與調用簡單示列

浏覽器輸入http://localhost:36107/json/reply/TicketRequest?TicketId=1

ServiceStack Web Service 建立與調用簡單示列

浏覽器預設請求為GET,如果方法定義POST請求類型,可以采用第三方模拟Rest請求工具

ServiceStack Web Service 建立與調用簡單示列

參考: 

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

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。

生活不易,五行缺金,求打點

ServiceStack Web Service 建立與調用簡單示列