在Silverlight中的RIA Services中调用操作'myMethod'失败

时间:2011-04-25 17:58:03

标签: c# silverlight ria

我有一个服务器端WCF RIA服务,故意抛出异常,因为用户输入了无效值。这个异常遇到了这个问题,然而,我无法弄清楚如何抓住它。我目前有以下代码:

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);
  }
}

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

2 个答案:

答案 0 :(得分: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();
  }
}

答案 1 :(得分:0)

是的,因为在回调(OnCalculateCompleted)中,异常不会被编组。该异常将驻留在response.Error属性中。

但要小心,因为在response.Error!

中找不到服务器端抛出的异常

你应该覆盖你的DomainService的OnError方法,通过错误代码打包你的服务器端异常,在客户端(SL)方面,你必须再次解压缩它。