Я пытаюсь использовать DataContractResolver в качестве альтернативы KnownTypes в WCF.DataContractSerializerOperationBehavior не найден при попытке использовать DataContractResolver
У меня есть следующий код, и я использовал его раньше на стороне сервера. Но на стороне клиента код возвращает null при попытке найти DataContractSerializerOperationBehavior в коллекции поведения операций.
public override IMyService CreateProxy(Uri url)
{
ServiceEndpoint endpoint = CreateEndpoint(url);
var channelFactory = new ChannelFactory<IMyService>(endpoint);
InjectResolver(channelFactory.Endpoint);
return channelFactory.CreateChannel();
}
private void InjectResolver(ServiceEndpoint endpoint)
{
foreach (OperationDescription operation in endpoint.Contract.Operations)
{
var behavior = operation.Behaviors.Find<DataContractSerializerOperationBehavior>();
behavior.DataContractResolver = new DerivedTypeResolver(); // behavior is null here!
}
}
Почему поведение отсутствует?
UPDATE: Я выяснил, что реальная проблема заключается в том, что WCF использовал XmlSerializer вместо DataContractSerializer. Есть ли способ заставить DataContractSerializer вместо этого? Использует ли WCF сериализатор на основе wsdl? Учитывая, что у меня пока нет возможности изменить серверную часть, каков мой вариант? Поведение XmlSerializer, похоже, не похоже на вариант разрешения самого типа.
Спасибо за пример. Я попытался добавить его сам, но я узнал, что реальная проблема заключалась в том, что WCF использовал XmlSerializer вместо DataContractSerializer - вероятно, поэтому поведение не было найдено. –
Это может помочь вам http://web.archive.org/web/20130430190551/http://www.danrigsby.com/blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-serialization-in -wcf / –