2015-01-15 1 views
1

하나의 서비스를 다른 서비스 내부에서 호출하려고 시도합니다.InvalidCastException, 데이터 대신 ServiceStack.CompressedResult를 가져 오는 중

입력 유형 'ServiceStack.CompressedResult를'개체를 캐스팅 할 수 없습니다 'System.Collections.Generic.List`1 다음 service.Any (...) 호출을 호출

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

다음과 같은 예외를 생성 [DV.Svc.Model.MyData] '.

이면 MyService는

답변

1

이것은 (... base.Request.ToOptimizedResultUsingCache을 반환) 캐시를 사용하지 때문에 당신이 돌아 왔을 때 :

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); 
} 
두 서비스는 그들이 당신의 의존성에 액세스하려는 선언 할 수 있습니다
관련 문제