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

Silverlight WCF RIA服务业务规则/数据库异常处理,silverlight,silverlight-3.0,exception-handling,wcf-ria-services,Silverlight,Silverlight 3.0,Exception Handling,Wcf Ria Services,我正在使用WCF RIA Services VS2008/.NET3.5并尝试进行异常处理。我已经重写了DomainService的OnError方法,并在该方法中执行异常处理。我试图以某种形式向客户机抛出业务规则异常或数据库异常,以便客户机识别它们并以不同的方式处理它们。 问题是客户端总是收到DomainServiceException和原始错误消息,第一行显示操作名称失败。所以,我无法在客户端识别异常类型。我尝试在OneError中为某些类型的异常添加一个特殊字符串,如下所示 ///

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

   /// <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);
        }
    }
//
///异常处理和登录错误
/// 
/// 
受保护的覆盖无效OnError(DomainServiceErrorInfo errorInfo)
{
异常ExceptionLog=null;
//若异常是业务规则异常,则仅当存在内部异常时才记录
if(errorInfo.Error.GetType()==typeof(BusinessRuleException))
{
if(errorInfo.Error.InnerException!=null)
{
ExceptionLog=errorInfo.Error;
}
//将业务规则异常发送到客户端
base.OnError(newdomainserviceerrorinfo(newdomainexception(“BRE:+errorInfo.Error.Message)));
}
其他的
{
ExceptionLog=errorInfo.Error;
//如果是其他服务器错误,则只发送一般消息。
one错误(新域服务错误信息(新域异常(ValidationErrorResources.MSG_GenericServerError));
}
如果(ExceptionLog!=null)
{
//日志异常
LogError(exceptionLog);
}
}
但这一伎俩似乎并不奏效。 是否有任何方法可以将一些额外的信息附加到从服务器向客户机抛出的异常上。
请建议。

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


通过从OnError中抛出一个新的DomainException,您可能会得到类似的行为,尽管这是一个很难解决的问题(假设它有效)。

但对于在不久的将来无法升级到.Net 4.0的用户来说,这是一个失望的结果。