InvalidCastException,获取ServiceStack.CompressedResult而不是数据

时间:2015-01-15 19:17:18

标签: c# servicestack

尝试从另一个内部调用一个servicestack服务。

        using (var service = base.ResolveService<MyService>())
        {
            var vds = (List<MyData>)service.Any(params);
            foreach (var vd in vds)
            {
                DoStuff(vd);
            }
        }

调用service.Any(...)调用会生成以下异常:

无法转换类型&#39; ServiceStack.CompressedResult&#39;的对象输入&#39; System.Collections.Generic.List`1 [DV.Svc.Model.MyData]&#39;。

MyService确实使用缓存(return base.Request.ToOptimizedResultUsingCache ...)

1 个答案:

答案 0 :(得分:1)

这是因为当你回来时:

base.Request.ToOptimizedResultUsingCache(...)

您在创建缓存的第一个请求时返回DTO,但随后在请求中返回服务响应的最佳缓存版本(例如泄露的JSON响应)。

您应该重构它,以便您可以访问服务的非缓存版本,例如:

using (var service = base.ResolveService<MyService>())
{
    var vds = service.GetMyData(params);
    foreach (var vd in vds)
    {
        DoStuff(vd);
    }
}

或者,您可以将共享逻辑重构为单独的依赖关系,这样您就不需要跨服务进行通信。然后,两个服务都可以声明他们想要访问您的依赖项:

public IMyRepository MyRepository { get; set; }

可以使用它来代替直接调用内部服务,例如:

var vds = MyRepository.GetMyData(params);
foreach (var vd in vds)
{
    DoStuff(vd);
}