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