C# を使用してサービス操作を構築しています。何か問題が発生した場合、クライアント側でキャッチできる例外をスローしたいと考えています。
ただし、例外がスローされると、クライアントは「400: bad request」のような一般的なエラーしか取得できず、例外メッセージにアクセスできません。
私のサービス操作では、これで詳細なエラーを有効にしました:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
and
config.useVerboseErrors = true;
また、TargetInvocationException をアンパックし、代わりにこの関数で DataServiceException を返します。
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 を返すと、回答本文に例外メッセージが表示されます。しかし、明らかに私はこれをしたくありません。
では、サービス操作から例外をスローしたときに、クライアント側で例外メッセージを取得する方法はありますか?