在我的Silverlight应用程序中,我希望正确处理不同的服务器错误。
我为DomainOperationException
创建了处理程序,但我希望获得有关问题根本原因的更具体信息,并为用户提供更清晰的消息。
可能的方法:
OperationStatus
给了我一些优势,但仍然大部分都是
连接到服务器的错误有OperationStatus.ServerError
,无论是DB还是IIS问题; ErrorCode
属性,但我不知道从哪里获取适合RIA的可能错误代码列表; 注意:即使没有自己设置ErrorCode
,当服务器端出现数据库连接问题时,它的值为500。这就是为什么我希望RIA做的都是肮脏的工作,我会避免这种多余的努力。
问题:
DomainOperationException
?答案 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;
}