【发布时间】:2014-01-13 07:41:55
【问题描述】:
我在我的应用程序中使用了自定义 XmlObjectSerializer。为此,我将XmlSerializerOperationBehavior 替换为MyOperationBehavior,如下所示:
public class MyOperationBehavior : DataContractSerializerOperationBehavior
{
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return new MySerializer();
}
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return new MySerializer();
}
}
问题在于,这样做会将任何故障反序列化为非泛型 FaultException 而不是 FaultException<TDetail>,并且我无法访问故障的详细信息。
在做了一些调查后,我发现问题的根源在于,通过从 DataContractSerializerOperationBehavior 继承,.NET 在内部将 FaultFormatter 设置为 DataContractSerializerFaultFormatter,它不知道如何反序列化错误的详细信息(而不是XmlSerializerFaultFormatter)。问题绝对不在MySerializer 中,因为FaultException 在到达我的ReadObject 方法之前就被抛出了。
所以我的问题是如何让 WCF 正确反序列化我的故障详细信息? 我尝试自己寻找一种方法来设置 FaultFormatter,但没有运气,尤其是因为所有这些格式化程序都是内部的。
【问题讨论】:
标签: c# .net wcf serialization fault