1

VB COM+ サービスから呼び出される .Net コンポーネントの作成を開始しようとしています (新しいコンポーネントは、Web サービスを呼び出し、応答に基づいて戻る DLL です)。呼び出し元の VB の .Net コードで発生する可能性のあるエラー状態を処理する方法がわかりません。

私が心配している2種類のエラーは次のとおりです。

  • 前提条件が満たされない場合にスローしたい例外 (たとえば、パラメーターとして指定された開始日が、パラメーターとして指定された終了日から 3 か月以内である場合。StartDateNotValidException をスローしたい場合があります)
  • Web サービス呼び出しの一部として発生する可能性が高い例外 (タイムアウト、404 など)。

これらのいずれかが発生した場合、特定のフィードバックをユーザーに返したり、ログに情報を記録したりしたいと思います。.Net コードから Int リターン コードを返し、例外を回避することを考えていましたが、呼び出し元の VB コードが最終的に .Net に移行される可能性があるため、可能であれば例外を使用したいと考えています。

COM Interop が標準ライブラリの例外を HRESULT に自動的に変換することをMSDNで読みました。誰もこれを使用した経験がありますか? これを使用して、カスタム .Net 例外を、VB で処理できるエラー状態に変換できますか?

ありがとう、ニック

4

2 に答える 2

1

見たことはあると思いますが、前職だったので詳細は確認できません。COMException から例外クラスを継承し、正しい ErrorCode (アンマネージ コードでは HResult として変換する必要があります) を設定したと思います。アンマネージ コードで HResult を使用できるだけでなく、マネージ クライアントで型付き例外を適切に処理できるため、これは非常に便利です。

実際に動作するかどうか教えてください。

于 2008-11-06T15:43:55.637 に答える
0

私は次の方法を使用して終了しました:

  • アプリケーション固有の VB エラー コードをアプリケーション固有の C# カスタム例外にマップする大きなディクショナリがあります。
  • C# の例外を VB のエラー コードに変換する (およびその逆) メソッドを作成する
  • メソッド呼び出しで発生したビジネス例外を含む文字列の配列をメソッドから返します (現在、これらは 2 つしかありません)

これを行う理由は、例外ツリーを適応させて COMException を拡張するのが面倒すぎるためです (いずれにせよ、上記よりも面倒です)。そのため、COMException から継承して、ErrorCode が HResult に正しく変換されたかどうかを確認しようとはしませんでした。

提案をありがとう、そしてそれを試していないことをお詫びします。

于 2008-11-20T16:55:04.560 に答える