这是我观察到的
我需要从服务向客户端抛出一个自定义异常子类型。(列为FaultContract 上的具体操作)。我在 CustomException 上有某些字段,应该由客户端接收。
[Serializable]
class MyCustomException : Exception
{
public string From { get; private set; }
public MyCustomException(string where)
{
From = where;
}
}
}
我发现即使在 FaultException 实例中存在异常,该字段也没有被反序列化。我尝试通过覆盖 GetObjectData 和序列化 ctor 来实现 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 中传播自定义异常子类型的字段的正确方法是什么?