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

InvalidCastException, getting back ServiceStack.CompressedResult instead of data

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

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

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

无法将类型 'ServiceStack.CompressedResult' 的对象转换为类型 'System.Collections.Generic.List`1[DV.Svc.Model.MyData]'。

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

这是因为当你 return:

base.Request.ToOptimizedResultUsingCache(...)

您在第一个创建缓存的请求中 returning DTO,但随后在后续请求中 returning 服务响应的最佳缓存版本(例如,放气 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);
}