处理DomainOperationException的正确方法

4
在我的Silverlight应用程序中,我希望能够正确处理不同的服务器错误。我创建了DomainOperationException处理程序,但我想获取有关问题根本原因的更具体信息,并为用户提供更清晰的消息。
可能的方法:
  • OperationStatus 给了我一些优势,但大多数与服务器相关的错误都有 OperationStatus.ServerError,无论是DB还是IIS问题;
  • 异常还具有 ErrorCode 属性,但我不知道在哪里可以获取适用于RIA的可能错误代码列表;
注意:即使没有自己设置 ErrorCode,当服务器端出现与DB连接有关的问题时,它也具有值500。这就是为什么我希望RIA正在做所有繁琐的工作,我将避免进行这种冗余工作的原因。

问题:

  1. 如何正确处理DomainOperationException
  2. 在哪里获取可能的错误代码?
1个回答

5
ErrorCode是用户定义的值。根据MSDN所述,它获取或设置此异常的自定义错误代码。错误代码可以是任何用户定义的值。
可能有更优雅的解决方案,但我最终做的是创建一个可移植类库(但您也可以使用.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;
}

我更喜欢使用共享枚举来实现这个目的。效果很好。 - Anatolii Gabuza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接