私のwcfアプリケーションのグローバル例外処理をビルドしました。私は 'IErrorHandler'を実装し、例外を処理するクラスを持っています。 ErrorHandlerを 'IServiceBehavior'属性で登録できます。 (私はすべての関数に触れる必要はありません)WCFグローバル例外処理
クラス 'FaultException'を使用して例外オブジェクトをラップします。
Dim sysEx As SystemException = 'Do Convert
Dim fex As New FaultException(Of SystemException)(sysEx, sysEx.Message)
Dim faultMessage As MessageFault = fex.CreateMessageFault
fault = System.ServiceModel.Channels.Message.CreateMessage(version, faultMessage, fex.Action)
ここで、クライアント側でエラーメッセージを取得できます。しかし、残念ながら私は元の例外タイプまたは元のスタックトレースを取得できません。
サービスの各機能に「FaultContract」を追加することなく問題を解決する簡単な方法はありますか?
はあなた
多分私は自分自身を間違って表現しました。クラス "UncaughtErrorFault"をクライアント側に "公開"するにはどうすればよいですか?タイプは自動生成された「サービス参照」(もちろん)に追加されません。したがって、WCFはフォールトを「UncaughtErrorFault」オブジェクトではなく、通常のSystem.Exceptionに変換します。どうすればこの問題を解決できますか? – Mimefilt
カスタムフォールトを公開するには、この[MSDN記事](http://msdn.microsoft.com/en-us/library/ms733841.aspx)を参照してください。カスタムOperation Typeを指定するFaultContract属性を使用してService OperationContractメソッドをマークする方法を示します。ただし、サービスリファレンスに必要なデシリアライズコードを含めるには、サービスの各オペレーションメソッドにマークを付ける必要があります。それが@SteveWilkesへの私のコメントで私が言及していたものでした –