【问题标题】:ServiceStack - Service consuming others servicesServiceStack - 使用其他服务的服务
【发布时间】:2013-07-23 14:13:18
【问题描述】:

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

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

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

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

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

}

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

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

【问题讨论】:

  • 是否有理由必须使用返回类型对象而不是返回类型 DTO? public MyResponse Get(MyRequest request)...
  • 事实上没有!我无缘无故地打开了这个赏金,因为它在我的应用程序架构中失败了。问题中的 MyRequest 是控制器级别的请求(使用其他服务的服务),这就是为什么我需要返回对象或响应状态(对于 httpstatuscode 等):)
  • 您能否提供更多信息,说明您目前的情况?

标签: servicestack


【解决方案1】:

恐怕没有理解你的问题,我没有主题,

但我会使用相同的响应对象,只更改请求。

在服务模型中

                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" };
                  } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多