4

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


可能的方法:

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

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


问题:

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

1 回答 1

5

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

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

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

然后我覆盖了 DomainService 的OnError-method 并做了这样的事情:

 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;
}
于 2012-06-19T20:53:21.180 回答