2011-07-01 64 views
0

我正在創建一個使用聚合(內置)COM對象的類庫。此COM對象的方法和屬性可能會拋出COMException,其中ErrorCode屬性爲HRESULT,表示COM對象的內部邏輯中存在錯誤。異常處理應用程序塊 - 如何根據原始消息的某些屬性用我自己的原始消息替換原始消息?

例如,HRESULT(和因此COMException.ErrorCode)= -1001意味着特定方法的輸入參數格式不正確。

我想利用異常處理應用程序塊在我的圖書館,並在接下來的方式我的自定義異常更換有意義的錯誤碼COMExceptions:

COMException.ErrorCode = -1001 ---> MyLibraryException.ErrorReason = DeviceError .BadFormatOfInputParam & & MyLibraryException.InnerException = originalCOMException,其中DeviceError是枚舉&其中是明確DeviceError memeber從COM對象的每個特定HRESULT。

如何使用異常處理應用程序塊實現此目的?

感謝

回答

0

你需要編寫自定義異常處理程序,並把它插入到該塊。

你不說你正在使用哪個版本的Entlib。如果版本爲5.0或更高版本,請抓住Enterprise Library Extensibility Hands-on labs。關於如何編寫自定義異常處理程序的第一個練習。

從那裏你只需要實現你的邏輯來做你想做的任何事情。

0

一個更簡單的方法,但不太理想,是拋出一個新的異常作爲更標準的異常類型。

例如對於一個SOAP異常:

catch (System.Web.Services.Protocols.SoapException soapEx) 
{ 
    throw new Exception("System.Web.Services.Protocols.SoapException" 
      + Environment.NewLine 
      + soapEx.Detail.InnerText 
     , soapEx); 
} 

,因爲你需要趕上並重新拋出每次調用COM方法,換句話說,很多重複的代碼的時候這是不太理想的。

創建您自己的異常處理程序,以@Chris Tavares的身份執行上述操作會更好。您只需創建一次excption處理程序,然後您可以在執行處理的EL配置中設置「COM Method」策略。

相關問題