05.03.2009

Динамический ServiceKnownType

При использовании DataContractSerializer иногда возникает необходимость задавать динамически ServiceKnownTypes. Сделать это можно с использование класса-хелпера.



public static class ServiceHelper
{
private static List<Type> _knownTypes = new List<Type>();
public static List<Type> KnownTypes
{
get { return ServiceHelper._knownTypes; }
}

public static IEnumerable<Type> GetServiceKnownTypes(
ICustomAttributeProvider provider)
{
return _knownTypes;
}
}

[ServiceKnownType("GetServiceKnownTypes", typeof(ServiceHelper))]
[ServiceContract(SessionMode = SessionMode.NotAllowed)]
public interface IServiceContract
{
// методы сервиса
}


Добавление типов в ServiceHelper на клиенте можно делать до создания объекта реализующего контракт, а в сервисе в global.asax в методе Application_Start.

Комментариев нет: