我有一个服务器端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);
}
}
如何处理客户端服务器端操作引发的异常?我的捕获语句都没有被触发。谢谢!
答案 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)方面,你必须再次解压缩它。