1

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 を返すと、回答本文に例外メッセージが表示されます。しかし、明らかに私はこれをしたくありません。

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

4

1 に答える 1

0

エンド ツー エンドのトレースを見たことがありますか? さらに、このMSDN ページは、最初に思われるほど難しいものではなく、「例外が発生した場合に追加情報を提供する」セクションが役に立つと思います。素敵な読書を。

于 2012-04-11T13:45:44.130 に答える