2011-07-01 3 views
0

集約された(組み込みの)COMオブジェクトを使用するクラスライブラリを作成しています。このCOMオブジェクトのメソッドとプロパティは、COMExceptionをスローすることがあります。このErrorCodeプロパティは、COMオブジェクトの内部ロジックのエラーを示します。例外処理アプリケーションブロック - 元のメッセージのいくつかのプロパティに基づいて元のメッセージを元のメッセージと置き換える方法を教えてください。

たとえば、HRESULT(したがって、COMException.ErrorCode)= -1001は、特定のメソッドの入力パラメータが不正な形式であることを示します。

私は私のライブラリ内のアプリケーションブロックを例外処理を利用し、次の方法で、私のカスタム例外で有意義なのErrorCodeとCOMExceptionsを置き換えたい:

COMException.ErrorCode = -1001 ---> MyLibraryException.ErrorReason = DeviceError DeviceErrorがCOMオブジェクトからの各特定のHRESULTためDeviceError memeber明確で列挙&ある.BadFormatOfInputParam & & MyLibraryException.InnerException = originalCOMException、。

例外処理アプリケーションブロックを使用してこれを実現するにはどうすればよいですか?

ありがとうございました

答えて

0

カスタム例外ハンドラを作成してブロックに接続する必要があります。

使用しているEntlibのバージョンは表示されません。バージョン5.0以降の場合は、Enterprise Library Extensibility Hands-on labsを取得してください。カスタム例外ハンドラの記述方法に関する最初の演習。

そこから、必要な処理を行うロジックを実装するだけです。

0

より簡単な方法ですが、あまり望ましくないことは、新しい例外をより標準的な例外タイプとして投げることです。

SOAP例外のために:あなたがキャッチし、あなたがコードを繰り返すつまりロットで、COMメソッドを呼び出すたびに再スローする必要があるため

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

これはあまり望ましくありません。

上記の@Chris Tavaresのような独自の例外ハンドラを作成する方がはるかに優れています。エキスパントハンドラを作成する必要があるのは、ELの設定で処理を行う「COMメソッド」ポリシーを設定することだけです。

関連する問題