2013-07-23 149 views
4

我有一個關於iI應該如何從其他服務使用ServiceStack服務的問題。ServiceStack - 服務其他服務的服務

我已經回覆了我的所有請求DTO,女巫實現了IReturn接口。對於像JsonServiceClient這樣的客戶端,當我發出請求時,它會返回對象響應,其類型在IReturn中實現,太棒了!

既然我正在重新編寫項目的編寫插件,以便將來的項目中使用這些服務,那麼當我在另一個服務中注入服務併發出請求時,它將返回對象類型,因此我必須將其到HttpResult,然後將對象響應轉換爲DTO類型。

在我的大部分服務方法簽名中,我的對象是返回類型,然後返回一個帶有響應的HttpResult。例如:

public object Get(Request request) 
{ 
    return new HttpResult(responseObj); 

} 

除了使用客戶端的服務之外,我還有其他選擇嗎?

我有一個服務和DTO僅用於視圖,它從插件中消耗其他服務。這就是爲什麼我需要正確地獲得響應DTO(視圖服務像控制器一樣行事)。

+0

是否有您必須使用返回類型對象,而不是返回類型的DTO的理由? '公共MyResponse獲取(MyRequest請求)...' – Mike

+0

其實沒有!我無緣無故地打開了這個賞金,因爲它在我的應用程序架構中失敗了。問題中的MyRequest是一個控制器級別的請求(服務使用其他服務),這就是爲什麼我需要返回對象或響應狀態(對於httpstatuscode等):) –

+0

請問你提供更多信息,你是如何做到這一點在這一刻? – Esteban

回答

2

恐怕沒有理解你的問題,我出題目,

,但我會用同樣的反應物,只改變請求。

在服務模式

   public class TestRequest : IReturn<TestResponse> 
       { 
       public int Id { get; set; } 
       public string name { get; set; }  
       } 
       public class LowLevelRequest : IReturn<TestResponse> 
       { 
       public int Id { get; set; } 
       public string name { get; set; } 
       public string permissions { get; set; }  
       } 

       public class TestResponse 
       { 
        public bool success { get; set; } 
        public string message { get; set; } 
       } 
在路由表

    Routes 
         .Add<TestRequest>("/TestAPI/{Id}", "POST,GET, OPTIONS") 
         .Add<LowLevelRequest>("/InternalAPI/{Id}", "POST,GET, OPTIONS"); 

在服務

    public TestResponse Post(TestRequest request) 
        {  JsonServiceClient client=new JsonServiceClient(); 
         LowLevelRequest lowrequest=new LowLevelRequest() { Id=request.Id, name=request.name, permissions="RW" }               
         return client.Post<TestResponse>(lowrequest); 
        } 

        public TestResponse Post(LowLevelRequest request) 
        {  .... 
         return new TestResponse() { success=true, message="done" }; 
        }