Я пишу сервис WCF для замены текущего веб-сервиса, и у меня возникают проблемы с одним из устаревших сложных типов, который мне нужно вернуть.
К сожалению, я не могу коснуться любого кода, но, глядя на них, все классы являются сериализуемыми, и текущий веб-сервис использует его без проблем.
Всякий раз, когда мой клиент вызывает службу WCF, он получает исключение связи, и когда я включил трассировку для WCF, я обнаружил ошибку сериализации:
Тип 'Common.Permission.ApplicationGroup' с именем контракта данных ' ApplicationGroup : http://schemas.datacontract.org/2004/07/Common.Permission' не ожидается. Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, передаваемых DataContractSerializer.
Тип, который я хочу вернуть, - ApplicationPrincipal, но, похоже, он переходит на дочерний тип. Вот как выглядят эти классы:
Тип, который я хочу вернуть:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationPrincipal :
IPrincipal, ISupportInitialize, IDeserializationCallback, IFormattable
{
private ApplicationIdentity m_identity;
private ApplicationGroupCollection m_groups;
private ConditionDictionary m_roleConditions;
и вот ApplicationGroupCollection:
[Serializable]
public class ApplicationGroupCollection :
IList, IEnumerable, IFormattable, ISupportInitialize,
IDeserializationCallback, ICloneable, ICustomTypeDescriptor
{
/// <summary>
/// Occurs when a value is being changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanging;
/// <summary>
/// Occurs when a value has been changed in the collection.
/// </summary>
[field:NonSerialized]
public event CollectionChangeEventHandler CollectionChanged;
и, наконец, ApplicationGroup:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationGroup :
ICloneable, ISupportInitialize, IDeserializationCallback, IFormattable
{
private int m_groupID;
private string m_groupName;
private string m_groupDesc;
private ConditionDictionary m_roleConditions;
Какие-либо предложения относительно того, почему WCF не может сериализовать ApplicationGroup?