WCF RIA服务业务规则/数据库异常处理

时间:2009-12-28 20:24:12

标签: silverlight silverlight-3.0 exception-handling wcf-ria-services

我正在使用WCF RIA Services VS2008 / .NET 3.5并尝试进行异常处理。我已经覆盖了DomainService的OnError方法并在该方法中进行了异常处理。我试图以某种形式将业务规则例外或数据库异常抛出到客户端,以便客户端识别它们并以不同方式处理它们。 问题是客户端总是收到DomainServiceException和原始错误消息,第一行显示操作名称失败。所以,我无法在客户端识别异常类型。我尝试在OnError中为某些异常添加一个特殊字符串,如下所示

   /// <summary>
    /// Exception handling and logging on error
    /// </summary>
    /// <param name="errorInfo"></param>
    protected override void OnError(DomainServiceErrorInfo errorInfo)
    {
        Exception exceptionToLog = null;
        //if exception is business rule exception then log only if there's an inner exception
        if (errorInfo.Error.GetType() == typeof(BusinessRuleException))
        {
            if (errorInfo.Error.InnerException != null)
            {
                exceptionToLog = errorInfo.Error;
            }
            //send the business rule exception to client
            base.OnError(new DomainServiceErrorInfo(new DomainException("BRE:" + errorInfo.Error.Message)));
        }
        else
        {
            exceptionToLog = errorInfo.Error;
            //if its some other server error then send only generic message.
            base.OnError(new DomainServiceErrorInfo(new DomainException(ValidationErrorResources.MSG_GenericServerError)));
        }

        if (exceptionToLog != null)
        {
            //log exception
            EntLibHelper.LogError(exceptionToLog);
        }
    }

但这个技巧似乎没有用。 有什么方法可以附加一些额外的信息,我从服务器扔到客户端的例外。 请建议。

1 个答案:

答案 0 :(得分:0)

在RTM更新中,您将能够在要发送回客户端的DomainServiceErrorInfo上设置Error属性。此时,您可以将其设置为DomainException的实例。

您可能通过从OnError中抛出一个新的DomainException来获得类似的行为,尽管这将是一个hacky变通方法(假设它有效)。