0

プロジェクト A にカスタム クラス、InvalidCodeException があります。

public class InvalidCodeException : Exception
    {
        public InvalidCodeException ()
        {
        }
        public InvalidCodeException (string message)
            : base(message)
        {            
        }

        public InvalidCodeException (string message, Exception innerException)
            : base(message, innerException)
        {

        }
    }

プロジェクト B の WCF サービス。プロジェクト C のクライアント。プロジェクト A はプロジェクト B と C で参照されます。

プロジェクト B から InvalidCodeException をスローし、プロジェクト C でキャッチしています。問題は、デバッグ時に例外がキャッチされないことです。

catch (InvalidCodeException ex)
{
  Trace.WriteLine("CustomException");
  throw;
}

しかし

catch (Exception ex)
{ throw; }
4

3 に答える 3

2

WCF は、多くの理由で例外を自動的にシリアル化しません (たとえば、クライアントが C# 以外の言語で記述されていて、.NET とは異なるプラットフォームで実行されている場合など)。

ただし、WCF は一部の例外情報を FaultException オブジェクトにシリアル化します。この基本情報には、例外クラス名などが含まれます。一般的な FaultException タイプを使用する場合は、それらの内部に追加のデータを格納できます。つまり、追加の例外データを格納するクラスはFaultException<FaultInfo>どこにありますか。FaultInfoデータ コントラクトのシリアル化属性をクラス プロパティに追加することを忘れないでください。

また、種類の FaultExceptions をスローするはずのメソッドに FaultContract 属性を適用する必要があります。

[OperationContract]
[FaultContract(typeof(FaultInfo))]
void DoSomething();
于 2013-08-20T23:18:08.113 に答える