2011-09-11 3 views
4

RIA 서비스에서 FaultContract 특성을 사용하여 Silverlight에 대한 예외의 일부로 추가 정보를 전달할 수있는 방법은 무엇입니까?RIA 서비스 및 FaultContract

+0

나는 같은 질문을 가지고 있습니다 ... 아직 아무것도 발견하지 못했습니까? – sebagomez

답변

2

그래서 나는 decompiled RIA Services 코드를 사냥하러 갔다. 클라이언트로 전송되는 오류 정보를 크게 변경하는 것처럼 보이지는 않습니다.

DomainService에서 OnError() 메서드를 재정의 할 수 있지만 사용자 지정 예외 유형 인 경우에도 임의의 정보를 다시 전달할 수는 없습니다.

이유는 DomainServices.Hosting.QueryProcessor 클래스의 예외 처리에 포함되어 있습니다.

도메인 작업에서 처리되지 않은 예외가 발생하면이 작업이 취소되고 결국 FaultException()이 발생합니다 (기본적으로 WCF가 처리 함).

Unfortuantely의 DomainServiceFault 클래스는 ... 그것은 단지 ...

public class DomainServiceFault 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorMessage { get; set; } 
    public bool IsDomainException { get; set; } 
    public string StackTrace { get; set; } 
    public IEnumerable<ValidationResultInfo> OperationErrors { get; set; } 

    public IEnumerable<ValidationResult> GetValidationErrors() 
    {} 
} 

을 몇 가지 속성을 매우 경량이되고,이 때문에 같은 ServiceUtility.CreateFaultExceotion()에 채워집니다 :

DomainServiceFault detail = new DomainServiceFault(); 
<snip/> 
detail.ErrorCode = domainException.ErrorCode; 
detail.ErrorMessage = ServiceUtility.FormatExceptionMessage((Exception) domainException); 
detail.IsDomainException = true; 

if (current != null && !current.IsCustomErrorEnabled) 
    detail.StackTrace = domainException.StackTrace; 

return new FaultException<DomainServiceFault>(detail, new FaultReason(new FaultReasonText(detail.ErrorMessage ?? string.Empty, CultureInfo.CurrentCulture))); 

그것은 가치 유효성 검사 오류가 아닌 예외의 경우에는 OperationErrors이 채워지지 않습니다.

그래서이 모든 결과는 사용자 정의 예외 정보를 래핑하거나 DomainService 오류 처리기 (실제로는 불행한 것)에 첨부 할 수 있다고 생각하지 않는다는 것입니다.

+0

이 작은 단점으로 인해 RIA Services 프레임 워크가 현실 세계 시나리오에 대비할 준비가되지 않은 것처럼 느껴집니다 ... 고마워요! – sternr

+0

@sternr 우리는 종종 그런 식으로 느낍니다. RIA Services는 기본 데이터 모델 및 응용 프로그램에 매우 적합하다고 생각합니다. 매우 상세하고 복잡한 응용 프로그램의 경우 어려움을 겪습니다. –