尝试从另一个内部调用一个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 ...)
答案 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);
}