0

私は、すべてのアプリケーションを通じて内部使用するための一連の WCF サービスを構築しています。例外処理のために、デフォルトの障害クラスを作成したので、何が起こったのかわからない場合や一般的な場合に、処理されたメッセージを呼び出し元に返すことができます。

障害契約:


    [DataContract(Name = "DefaultFault", Namespace = "http://contoso.com/api/2010/03")]
    public class DefaultFault
    {           
        public DefaultFault(DefaultFaultItem[] items)
        {
            if (items == null || items.Length== 0)
            {
                throw new ArgumentNullException("items");
            }

            StringBuilder sbItems = new StringBuilder();

            for (int i = 0; i 

Specifying that my method can throw this exception so the consuming client will be aware of it:

        [OperationContract(Name = "PlaceOrder")]
        [FaultContract(typeof(DefaultFault))]
        [WebInvoke(UriTemplate = "/orders", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, Method = "POST")]
        string PlaceOrder(Order newOrder);

ほとんどの場合、通常のバインドで .NET から .NET への通信のみを使用します。同じ言語を使用しているため、すべて正常に動作します。ただし、サービス コントラクト宣言でわかるように、私たちのアプリの 1 つが iPhone 用に構築され、この男が JSON を話すため、JSON も話すことができるようにするために、WebInvoke 属性 (および webHttp バインディング) があります。

私の問題は、FaultException をスローし、構成ファイルに includeExceptionDetails="false" があると、呼び出し元のクライアントがカスタム メッセージではなく一般的な HTTP エラーを受け取ることです。

これが includeExceptionDetails がオフになっている場合の正しい動作であることは理解していますが、かなり前に、一部の例外/障害がサービス境界を通過できるようにするための構成を見たと思います。

このようなことはありますか?そうでない場合、私のケースに何を提案しますか?

どうもありがとう!

4

2 に答える 2

0

いいえ、そうは思いません。includeExceptionDetails 設定が false に設定されている場合、すべての例外はジェネリックになります (設計上そうなります)。その場合、いくつかの障害を詳細に表示する「抜け穴」を知りません。

于 2010-05-11T21:04:49.897 に答える
0

例外を返すには、サービス実装の上にサービス動作属性を次の形式で追加する必要があります: [servicebehavior (ReturnUnknownExceptionAsFaults = true)] このアプローチはデバッグにのみ使用することに注意してください。

リラン。

于 2010-05-11T11:57:37.730 に答える