【问题标题】:Exception handling in RIA ServiceRIA 服务中的异常处理
【发布时间】:2011-08-11 14:41:36
【问题描述】:

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

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

我想为每个可能发生的错误提供故障类型。客户端应该检查出了什么问题并相应地显示错误消息。我禁用了 customErrors 但它没有帮助。任何帮助,将不胜感激。 谢谢

【问题讨论】:

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


【解决方案1】:

Colin Blair 回答了我的问题here

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

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

【解决方案2】:

我已阅读有关在 Silverlight 中使用 WCF 错误的信息,但尚未尝试使用 WCF RIA。

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

【讨论】:

    【解决方案3】:

    代码示例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      相关资源
      最近更新 更多