Pourquoi ne puis-je pas utiliser WCF DataContract et ISerializable sur la même classe?

J'ai une classe que j'ai besoin d'être en mesure de sérialiser un SQLServer variable de session et être disponible sur un Service WCF. J'ai déclaré comme suit

namespace MyNM
{
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]

public class Foo : IEntity, ISafeCopy<Foo>
{
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; }

    [DataMember(Order = 1)] 
    public virtual string a { get; set; }

    DataMember(Order = 2)]
    public virtual Bar c { get; set; }

    /* ISafeCopy implementation */
}


[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
    #region Implementation of IEntity

    DataMember(Order = 0)]
    public virtual Guid Id { get; set; }
    [DataMember(Order = 1)]
    public virtual Baz y { get; set; }

    #endregion

    /* ISafeCopy implementation*/
}


[Serializable]
[DataContract]
public enum Baz
{
    [EnumMember(Value = "one")]
    one,
    [EnumMember(Value = "two")]
    two,
    [EnumMember(Value = "three")]
    three
}

Mais quand j'essaie de l'appeler ce service, j'obtiens l'erreur suivante dans le journal de suivi.

"Du système.Moment de l'exécution.La sérialisation.InvalidDataContractException:
Type
'BarProxybcb100e8617f40ceaa832fe4bb94533c'
ne peut pas être ISerializable et ont
DataContractAttribute attribut."

Si je sors de l'attribut Serializable, le service WCF fonctionne, mais lorsque l'objet ne peut pas être sérialisé à la session. Si je supprime le DataContract attribut de la classe Bar, le service WCF ne parvient pas dire

Type
'BarProxy3bb05a31167f4ba492909ec941a54533'
avec des données nom du contrat
'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07/'
n'est pas prévu. Ajouter tous types pas
connu statiquement à la liste des
types - par exemple, en utilisant le
KnownTypeAttribute attribut ou par
en les ajoutant à la liste des types connus
passé à DataContractSerializer

J'ai essayé d'ajouter un KnownType attribut de la classe foo

[KnownType(typeof(Bar))]

Mais j'obtiens toujours la même erreur.

Quelqu'un peut m'aider avec ça?

Merci beaucoup

Dave

source d'informationauteur Dave