2012-06-19 140 views
4

在我的Silverlight應用程序中,我想正確處理不同的服務器錯誤。 我爲DomainOperationException創建了處理程序,但我想獲得有關問題根本原因的更具體信息,併爲用戶提供更清晰的消息。正確處理DomainOperationException


可能的方式來做到這一點:

  • OperationStatus給了我一定的優勢,但仍主要是連接到服務器的所有 錯誤有OperationStatus.ServerError無論是DB或IIS問題;
  • 異常也有ErrorCode屬性,但我不知道從哪裏獲得適用於RIA的可能的錯誤代碼列表;

注意:即使沒有自己設定ErrorCode當DB連接問題,在服務器端產生它的價值500。這就是爲什麼我希望RIA做所有骯髒的工作,並且我會避免做這些冗餘的工作。


問題:

  1. 什麼是正確處理 DomainOperationException的最佳方式?
  2. 從哪裏得到可能的錯誤代碼?

回答

5

ErrorCode是用戶定義的值。 MSDN指出它爲

獲取或設置此異常的自定義錯誤代碼。錯誤代碼可以是任何用戶定義的值。

也許有更優雅的解決方案,但我最後做的是創造一個Portable Class Library(但你可以使用一個.shared類也是如此),我確定我的錯誤代碼的enum。我在服務器端和客戶端項目中引用了該項目。

我則推翻了的DomainService的OnError - 方法,做了這樣的事情:

protected override void OnError(DomainServiceErrorInfo errorInfo) 
{ 
    if (errorInfo.Error is UnauthorizedAccessException) 
    { 
     errorInfo.Error = new DomainException("Denied access.",(int)MyErrorCodesEnum.Permission_Unauthorized, errorInfo.Error); 
    } 
} 

(這段代碼這讓我想創造一種異常類型和枚舉值的關聯列表,所以我可以展望降if,但你的想法)

在客戶端我做的:

switch ((MyErrorCodesEnum)(s.Error as DomainException).ErrorCode) 
{ 
    case MyErrorCodesEnum.Permission_Unauthorized: 
     //do something 
     s.MarkErrorAsHandled(); 
     break; 
} 
+0

我喜歡分享枚舉此目的。效果很好。 –