Przekonwertowałem moją usługę sieci Web do usługi wcf, która ma kilka datacontr. Najlepszą praktyką jest wspomniane i wskazane, że Kontrasy danych powinny dziedziczyć z IExtensibleDataObject. Rozumiem, że w przypadku dodawania lub usuwania datamembers pomocne jest IExtensibleDataObject. Ale nie jestem w stanie uzyskać w jaki sposób klienci mają dostęp do usuniętych datamembers. Tu jest mój kodu:Użycie IExtensibleDataObject w klientach
[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; }
}
Teraz w kolejnej wersji usługi internetowej Zrobiłem kilka zmian do DataContract jako
[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; }
}
Jednak mój klient, który uzyskuje dostęp do mojej starszej wersji usługi internetowej jest teraz coraz błędu za brak podania pola MiddleName. Nadal jestem zdezorientowany z powodu użycia IExtensionDataObject.
Co jest nie tak? .NET generuje automatycznie pole pomocnicze - a dokumentacja Microsoft nie wyjaśnia, dlaczego musi być wirtualna i dlaczego wymaga ręcznie określonego pola wsparcia. – ShadowChaser