2011-04-25 73 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); 
    } 
} 

如何处理客户端服务器端操作引发的异常?我的catch语句都没有被触发。谢谢!

回答

2

在客户端,InvokeOperation.HasErrors将是true,您可以从InvokeOperation.Error获取Exception对象。请注意,如果您处理了错误,您还应该拨打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属性中。

但要小心,因为服务器端抛出的异常不会在response.Error中找到!

您应该重写您的DomainService的OnError方法,通过错误代码打包您的服务器端异常或其他内容,并且在客户端(SL)一侧,您必须重新打开它。