ServiceStack - 服务消耗其他服务

时间:2013-07-23 14:13:19

标签: servicestack

我有一个关于iI应如何从其他服务中使用ServiceStack服务的问题。

我已经针对我的所有请求回复了DTO,这实现了IReturn接口。对于像JsonServiceClient这样的客户端,当我发出请求时,它返回对象响应,其类型在IReturn中实现,太棒了!

现在我正在重新考虑为将来的项目中使用的服务编写插件的项目,当我在另一个服务中注入服务并发出请求时,它返回对象类型,所以我必须将它转换为HttpResult,然后将对象响应转换为DTO类型。

在我的大多数服务方法签名中,我将对象作为返回类型,然后返回带有响应的HttpResult。例如:

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

}

除了从客户端使用服务之外,我还有其他选择吗?

我有一个服务和DTO仅用于视图,它使用插件中的其他服务。这就是我需要正确获取响应DTO的原因(视图服务就像控制器一样)。

1 个答案:

答案 0 :(得分: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" };
                  }