RIA服务中的异常处理

本文关键字:异常处理 服务 RIA | 更新日期: 2023-09-27 17:53:07

您知道,建议使用FaultException和标准WCF服务来处理异常,以隐藏异常细节。这很好,但我有问题与WCF Ria服务。我想从域服务抛出一个异常,客户端将处理该异常。我想避免披露异常的敏感信息,如堆栈跟踪,方法名称等。如果它是标准的WCF服务,我会使用FaultException异常,但在Ria服务中,它不起作用。无论我从域服务抛出什么样的异常,客户端总是得到DomainOperationException。是否有任何方法我可以抛出FaultException到silverlight客户端从域服务(不透露实际的异常细节)?例如,我有一个登录窗口。当用户点击登录按钮时,应该有几个验证失败,例如:

  • 用户名或密码无效
  • 用户帐号被锁定
  • 帐号未激活

我想对可能发生的每个错误都有错误类型。客户端应该检查出了什么问题,并相应地显示错误消息。我禁用了customErrors,但它没有帮助。任何帮助都会很感激。由于

RIA服务中的异常处理

以下是Colin Blair对我的问题的回答

DomainService有一个可重写的方法命名为OnError。每当异常是否在DomainService本身(不在WCF代码),异常将被传递在它被重新抛出之前发送回客户端。如果你方法中替换异常DomainServiceErrorInfo传入使用自己的异常那么你的例外就是那个例外它会被发送回客户端。如果使用DomainException例外,然后你就可以传入一个ErrorCode整数可以使用客户端来确定吗实际的错误。

它回答了我的问题和需要。谢谢科林。

我读过关于在Silverlight中使用WCF错误的文章,但还没有在WCF RIA中尝试过。

http://mark.mymonster.nl/2011/02/10/make-use-of-wcf-faultcontracts-in-silverlight-clients/

代码示例:

[EnableClientAccess()]
public class YourDomainService : DomainService
{
    protected override void OnError(DomainServiceErrorInfo errorInfo)
    {
            base.OnError(errorInfo);
            customErrorHandler(errorInfo.Error);
    }
    private void customErrorHandler(Exception ex)
    {
            DomainServiceContext sc = this.ServiceContext;
            //Write here your custom logic handling exceptions
    }
}