1

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

/// <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); 
     } 
    } 

但是这个技巧似乎并不奏效。 有什么办法可以附加一些额外的信息,我从服务器抛出的异常到客户端。 请建议。

回答

0

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

通过从OnError中抛出一个新的DomainException,你可能会得到类似的行为,尽管这可能是一个怪异的解决方法(假设它有效)。

+0

尽管对于不久将来无法升级到.Net 4.0的用户来说,这是一个失望。 – 2010-01-04 22:00:57