正确处理DomainOperationException

时间:2012-06-19 12:43:34

标签: c# silverlight exception-handling wcf-ria-services

在我的Silverlight应用程序中,我希望正确处理不同的服务器错误。 我为DomainOperationException创建了处理程序,但我希望获得有关问题根本原因的更具体信息,并为用户提供更清晰的消息。


可能的方法:

  • OperationStatus给了我一些优势,但仍然大部分都是 连接到服务器的错误有OperationStatus.ServerError,无论是DB还是IIS问题;
  • 异常也有ErrorCode属性,但我不知道从哪里获取适合RIA的可能错误代码列表;

注意:即使没有自己设置ErrorCode,当服务器端出现数据库连接问题时,它的值为500。这就是为什么我希望RIA做的都是肮脏的工作,我会避免这种多余的努力。


问题:

  1. 正确处理的最佳方法是什么 DomainOperationException
  2. 从何处获取可能的错误代码?

1 个答案:

答案 0 :(得分:5)

ErrorCode是用户定义的值。 MSDN声明它

  

获取或设置此异常的自定义错误代码。错误代码可以是任何用户定义的值。

可能有更优雅的解决方案,但我最终做的是创建Portable Class Library(但你也可以使用.shared类),我用我的错误代码定义enum。我在服务器端和客户端项目中引用了该项目。

然后我覆盖了DomainService的OnError - 方法并执行了类似的操作:

 protected override void OnError(DomainServiceErrorInfo errorInfo)
 {
     if (errorInfo.Error is UnauthorizedAccessException)
     {
         errorInfo.Error = new DomainException("Denied access.",(int)MyErrorCodesEnum.Permission_Unauthorized, errorInfo.Error);
     }
 }

(看看这段代码,它让我想要创建一种异常类型和枚举器值的关联列表,这样我就可以放弃if,但你明白了这一点。

在客户端我做:

switch ((MyErrorCodesEnum)(s.Error as DomainException).ErrorCode)
{
    case MyErrorCodesEnum.Permission_Unauthorized:
        //do something
        s.MarkErrorAsHandled();
        break;
}