ServiceStack 項目實例 007 ServiceStack.Examples - 1

      ServiceStack的官網提供了很多的項目案例下載,不過有的示例不能拿來即用,並且案例中還有用的是用VS2010開發的,SS的版本也比較舊,要調整一下才能夠運行。git

       

      官方示例項目下載地址 https://github.com/ServiceStack/ServiceStack.Examples/tree/v3github

      其中包含以下示例項目(第一個目錄是升級到VS2013的升級記錄):框架

       wKiom1STgQqhBZ11AAGuLM0rt1k706.jpg

        在《StarterTemplates》目錄下有 一些項目起始模板測試

        wKioL1STgnDx6T1IAACuCxg11Ow203.jpg

 

        SS框架能夠在.net3.5以上的VS開發環境下使用,也就是最低要求VS2008,示例項目中有少數是VS2010的,大部分是VS2012的。this

 

        這裏說明一下《ServiceStack.Examples》這個項目,spa

        wKioL1STg32zm_O8AADkwF2_OD4097.jpg

 

         方案中共包含7個項目,在Host目錄下的三個項目.net

         ServiceStack.Examples.Clients  Web版的客戶端項目code

         ServiceStack.Examples.Host.Console 控制檯版的服務端項目blog

         ServiceStack.Examples.Host.Web  Web版的服務端項目繼承

 

         在Test目錄下的兩個項目

         ServiceStack.Examples.Tests  基本功能測試

         ServiceStack.Examples.Tests.Integration  整合方式測試(客戶端和服務端整合使用)

 

         ServiceStack.Examples.ServiceInterface  提供服務的項目(Service寫在這個項目)

 

         ServiceStack.Examples.ServiceModel  模型定義的項目(包含有路由)

 

         這個項目在最後發佈時僅須要發佈Hosts目錄下的文件便可,其餘的項目基本是類庫和測試項目。這個項目當中服務的調用使用了舊式的寫法,好比

       

1

2

3

4

5

6

7

public class GreetService : IService<Greet>

{

public object Execute(Greet request)

{

return new GreetResponse { Result = "Hello " + request.Name };

}

}

        其中的 GreetService : IService<Greet>  的建議新式寫法爲 GreetService : Service,Execute(Greet request) 的新式寫法爲 Get(Greet request) 。此外由於項目中使用了ServiceStack.Examples 和框架的 ServiceStack. 有衝突, 因此 GreetService : Service的繼承不能直接寫,須要寫成  GreetService : : ServiceStack.ServiceInterface.Service。

 

      注意其中的ServiceStack.Examples.ServiceModel 中的Types中實體類模型的定義:

1

2

3

4

5

6

7

8

9

    public class CustomerOrders

    {

        public CustomerOrders()

        {

            this.Orders = new List<Order>();

        }

         

        public Customer Customer { getset; }

        public List<Order> Orders { getset; }

     

    CustomerOrders 表包含有Customer 和 Orders 兩個表中外鍵關聯方式的數據,但在3.x的示例中,並無實現外鍵關聯方式獲取關聯表的數據,而是經過在實體類中設置關聯的內部類,在服務中獲取數據時候組合多表數據實現,這是一種和NoSQL使用的方法和思路相一致的實現。

   (在本示例中沒有演示獲取多表數據時候的組合合併過程,而是直接用一組樣本數據示例,樣本數據中已經設置好子類的數據,針對CustomerOrders 取得的數據是Customer 加上一組Order的List,組合好後直接返回給服務 ,詳見《ServiceStack.Examples.ServiceInterface》 項目下的GetNorthwindCustomerOrdersService)

 

     值得特別強調和說明是《ServiceStack.Examples.ServiceInterface》 項目下的GetUsersService.cs文件中根據一組ID或者用戶名獲取用戶列表的服務實現:

     根據逗號分隔的id獲取一組User數據的頁面:

      wKiom1STqkWTEb9wAACMOMddrZ4464.jpg

      獲取用戶列表的程序代碼: (修復後)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

     public object Any(GetUsers request)

        {

            using (var dbConn = ConnectionFactory.OpenDbConnection())

            {

                var users = new List<User>();

                if (request.UserIds != null && request.UserIds.Count > 0)

                {

                    users.AddRange(dbConn.GetByIds<User>(request.UserIds));

                }

                if (request.UserNames != null && request.UserNames.Count > 0)

                {

                    users.AddRange(dbConn.Select<User>(

                        "UserName IN ({0})", request.UserNames.SqlInValues()));

                }

                return new GetUsersResponse { data = users };

            }

        }

相關文章
相關標籤/搜索