J'ai converti mon service Web en service wcf avec des contrats de données. En tant que meilleure pratique, il est recommandé et recommandé que DataContracts hérite de IExtensibleDataObject. Je comprends que, en cas d'ajout ou de suppression de datamembers, IExtensibleDataObject est utile. Mais je ne suis pas capable d'obtenir comment les clients accèderont aux datamembres supprimés. Voici mon code:Utilisation de IExtensibleDataObject dans les clients
[ServiceContract(Namespace = "http://mycompany.com/2010/08/")]
public class MyWebService {
[OperationContract]
public Employee Add(Employee emp)
{
// Some Processing
}
}
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/08/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
public ExtensionDataObject ExtensionData { get; set; }
}
Maintenant, dans ma prochaine version du service web j'apporté quelques modifications à DataContract comme
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/09/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
[DataMember(IsRequired = true)] public string MiddleName;
public ExtensionDataObject ExtensionData { get; set; }
}
Cependant mon client qui accède à mon ancienne version du service Web devient maintenant erreur pour ne pas fournir le champ MiddleName. Je suis toujours confus pour l'utilisation de IExtensionDataObject.
Qu'est-ce qui est incorrect à ce sujet? .NET génère le champ de sauvegarde automatiquement - et la documentation de Microsoft n'explique pas pourquoi elle doit être virtuelle et pourquoi elle a besoin du champ de sauvegarde spécifié manuellement. – ShadowChaser