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