これが私が観察したことです
サービスからクライアントにカスタム例外サブタイプをスローする必要があります。(特定の操作でFaultContractとしてリストされています)。CustomExceptionに特定のフィールドがあり、クライアントが受け取る必要があります。
[Serializable]
class MyCustomException : Exception
{
public string From { get; private set; }
public MyCustomException(string where)
{
From = where;
}
}
}
FaultExceptionインスタンス内に例外が存在するにもかかわらず、フィールドが逆シリアル化されていないことがわかりました。GetObjectDataとシリアル化コンストラクターをオーバーライドしてISerializableを実装しようとしましたが、ダイスはありませんでした。私がそれを理解する唯一の方法は、MyCustomExceptionをDataContractに変更し、Exceptionから派生しないようにすることでした。
[DataContract]
class MyCustomException
{
[DataMember]
public string From { get; private set; }
public MyCustomException(string where)
{
From = where;
}
}
これは機能します。ただし、Exceptionから派生することはできなくなりました。ExceptionはSerializable属性でマークされており、タイプにSerializableとDataContractの両方を含めることはできないためです。(確認済み:実行時例外がスローされました)
だから私の質問は:WCFでカスタム例外サブタイプのフィールドを伝播する正しい方法は何ですか?