2011-04-25 1 views
1

사용자가 잘못된 값을 입력했기 때문에 의도적으로 예외가 발생하는 서버 측 WCF RIA 서비스가 있습니다. 이 예외는 전선을 가로 질러 온다. 그러나 나는 그것을 잡는 방법을 이해할 수 없다. 현재 다음 코드가 있습니다.Silverlight의 RIA 서비스에서 'myMethod'호출이 실패했습니다.

try 
{ 
    DomainContext.CalculateRequest(OnCalculateCompleted, null); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("here"); 
} 

... 

private void OnCalculateCompleted(InvokeOperation response) 
{ 
    try 
    { 
    if (response.HasError == false) 
    { 
     // Do stuff with result 
    } 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show(ex.Message); 
    } 
} 

클라이언트 쪽에서 서버 쪽 작업에 의해 throw 된 예외는 어떻게 처리합니까? 내 catch 문이 트리거되지 않습니다. 고맙습니다!

답변

2

클라이언트 측에서는 InvokeOperation.HasErrorstrue이고 InvokeOperation.Error에서 예외 개체를 가져올 수 있습니다. 오류를 처리 한 경우 MarkErrorAsHandled()으로 문의하십시오.

OnCalculateCompleted는 다음과 유사 할 수 있습니다.

private void OnCalculateCompleted(InvokeOperation response) 
{ 
    if (response.HasError == false) 
    { 
    // Do stuff with result 
    } 
    else 
    { 
    MessageBox.Show(response.Error.Message); 
    response.MarkErrorAsHandled(); 
    } 
} 
0

예, 콜백 (OnCalculateCompleted)에서 예외가 마샬링되지 않기 때문입니다. 예외는 response.Error 속성에 있습니다.

서버 측에서는 예외가 발생하지 않으므로주의하십시오. 오류!

DomainService의 OnError 메서드를 재정의하고 오류 코드 등을 통해 서버 측 예외를 패키지화해야하며 클라이언트 (SL) 측에서는 다시 언팩해야합니다.