RIA服务中的异常处理

时间:2011-04-23 19:53:36

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

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

  • 用户名或密码无效
  • 用户帐户已锁定
  • 帐户未激活
  • etc

我希望每个可能发生的错误都有错误类型。客户端应该检查出错的地方并相应地显示错误消息。我禁用了customErrors但它没有帮助。任何帮助,将不胜感激。 感谢

3 个答案:

答案 0 :(得分:11)

以下是科林·布莱尔回答我的问题here

  

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

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

答案 1 :(得分:0)

我已经阅读过在Silverlight中使用WCF故障,但尚未尝试使用WCF RIA。

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

答案 2 :(得分:0)

代码示例:

[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
    }
}