J'écris un service WCF pour remplacer un service Web actuel, et j'ai des problèmes avec l'un des types complexes hérités que je dois retourner.en utilisant WCF avec des types complexes hérités
Malheureusement, je ne peux pas toucher le code mais en les regardant, toutes les classes sont sérialisables et le service web actuel l'utilise sans problème.
Chaque fois que mon client appelle le service WCF il obtient une exception de communication et quand je me suis tourné sur le traçage de WCF est ici l'erreur de sérialisation J'ai trouvé:
Type « Common.Permission.ApplicationGroup » avec le nom de contrat de données 'ApplicationGroup: http://schemas.datacontract.org/2004/07/Common.Permission 'n'est pas prévu. Ajoutez tous les types non connus de manière statique à la liste des types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus transmis à DataContractSerializer.
Le type que je veux renvoyer est ApplicationPrincipal, mais il semble tomber sur un type enfant. Voici comment ces classes ressemblent:
Le type que je veux revenir:
[Serializable]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class ApplicationPrincipal :
IPrincipal, ISupportInitialize, IDeserializationCallback, IFormattable
{
private ApplicationIdentity m_identity;
private ApplicationGroupCollection m_groups;
private ConditionDictionary m_roleConditions;
et VOICI 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;
et enfin, 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;
Toutes les suggestions pourquoi WCF n'est pas capable de sérialiser ApplicationGroup?
merci pour le pointeur, je viens de mettre la main sur une copie du livre de Juval Lowy (2ème édition même!) Sur sarfaribooksonline, jetterai un coup d'oeil au chapitre 3 et se familiariser avec les exigences de datacontract dans WCF – theburningmonk
loin de la meilleure référence WCF que j'ai vu. –