想用自定義替換wcf serializer。 012,谷歌搜索後,我找到了一些例子。但它不起作用。 這裏是我的代碼: Substitutor:WCF自定義串行器不工作
internal class MySerializerSubstitutor : DataContractSerializerOperationBehavior
{
private static readonly MySerializer _serializer = new MySerializer();
public MySerializerSubstitutor (OperationDescription operationDescription)
: base(operationDescription)
{
}
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return _serializer; //NEVER CALLED
}
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return _serializer; // NEVER CALLED
}
}
行爲,repolace串行
public class MySerializerBehavior : IOperationBehavior
{
.......
public void ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
{
var dcs = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcs != null)
description.Behaviors.Remove(dcs);
description.Behaviors.Add(new MySerializerSubstitutor(description)); //works fine
}
......... ...
}
和主機:
protected override void ApplyConfiguration()
{
var behavior = new MySerializerBehavior()
foreach (var op in Description.Endpoints.SelectMany(ep => ep.Contract.Operations))
{
op.Behaviors.Add(behavior);
}
}
這段代碼有什麼問題?
ApplyConfiguration是否被調用?另外,您應該在ApplyDispatchBehavior之前刪除原始的DataContractSerializerOperationBehavior - 此時它可能已經被調用,因此它已經添加了它的運行時段,並且您將不會有機會這樣做。 – carlosfigueira