2012-04-11 15 views
1

私はC#を使用してサービスオペレーションを構築しています。何かがうまくいかないときは、私はクライアント側を捕まえることができる例外をスローしたい。サービスオペレーションの詳細な例外

例外がスローされると、クライアントは "400:bad request"のような一般的なエラーしか受け取れず、例外メッセージにアクセスできなくなります。

私のサービス操作で

、私はこれで冗長エラーが有効になっている:私もに、TargetInvocationExceptionを解凍し、代わりにこの関数でます。DataServiceExceptionを返す

[ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
and 
config.useVerboseErrors = true; 

を:

protected override void HandleException(HandleExceptionArgs args) 
    { 
     // Handle exceptions raised in service operations. 
     if (args.Exception.GetType() == typeof(TargetInvocationException) 
      && args.Exception.InnerException != null) 
     { 
      if (args.Exception.InnerException.GetType() == typeof(DataServiceException)) 
      { 
       // Unpack the DataServiceException. 
       args.UseVerboseErrors = true; 
       args.Exception = args.Exception.InnerException as DataServiceException; 
      } 
      else 
      { 
       // Return a new DataServiceException as "400: bad request." 
       args.UseVerboseErrors = true; 
       args.Exception = new DataServiceException(400, args.Exception.InnerException.Message); 
      } 
     } 
    } 

私はブラウザを使用私は冗長な例外メッセージを見ることができますが、プログラムで試してみると、内部例外はnullで、一般的なエラーメッセージ "400:bad request"しか表示されません。

奇妙なことに、私が400の代わりに200のコードを返すと、回答の本文に例外メッセージが表示されます。しかし、明らかに私はこれをしたくありません。

サービス操作から例外をスローすると、例外メッセージのクライアント側を取得する方法はありますか?

答えて

0

end to end tracingを見ましたか?さらに、this MSDNのページは、最初に見えるかもしれませんが、「例外発生時に追加情報を提供する」セクションが役立つと思います。素敵な読書をしてください。

関連する問題