前回、WCF の例外処理に関するエントリを書きました。
このエントリで紹介した方法よりも簡単に、例外情報をクライアントに返す方法があります。
ServiceBehavior の IncludeExceptionDetailInFaults プロパティを true にする
たったこれだけ。
コードで書くなら下の通り。
// サービスの実装クラスに ServiceBehavior 属性を付ける [ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class FooService : IFooService { public void Foo() { // 例外が発生する処理を記述 } }
構成ファイルで書くなら下の通り。
<system.serviceModel> <services> <service name="FooService" behaviorConfiguration="FooService_ServiceBehaviors"> <endpoint contract="IFooService" binding="netNamedPipeBinding"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="FooService_ServiceBehaviors" > <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
これで、クライアント側に FaultException
try { // サービス呼び出し channel.Foo(); } catch(FaultException<ExceptionDetail> ex) { // エラー処理 Console.WriteLine(ex.Detail.Message); }
Detail プロパティから取り出せる ExceptionDetail オブジェクトの中に、サービス側で発生した例外の情報が詰まっています。
デバッグ時には重宝する機能です。