IExtensibleDataObject Verwendung in Kunden
Habe ich umgewandelt mein web service wcf service die einige datacontracts. Als best-practice-es ist erwähnt und empfohlen, dass die DataContracts Erben sollen von IExtensibleDataObject. Ich bekomme den Punkt, dass bei hinzufügen oder entfernen von datamembers, IExtensibleDataObject ist hilfreich. Aber ich bin nicht in der Lage zu bekommen, wie wird den Kunden Zugang entfernt datamembers. Hier ist mein code:
[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; }
}
Nun in meiner nächsten version des web-service, den ich einige änderungen vorgenommen DataContract als
[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; }
}
Aber mein client, der Zugriff auf meine ältere version der web service ist jetzt immer Fehler nicht gemacht, den MiddleName Feld. Ich bin immer noch verwirrt für die Nutzung von IExtensionDataObject.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fürchte, das ist nicht die korrekte Verwendung von IExtensibleDataObject, die IExtensibleDataObject Schnittstelle wurde entwickelt, um support-version round-tripping, haben, Lesen Sie in dieser MSDN-Artikel auf die Aufwärtskompatibilität:
http://msdn.microsoft.com/en-us/library/ms731083.aspx
Und hier ist ein weiterer Artikel über die besten Praktiken auf den Daten-Vertrag Versionierung im Allgemeinen:
http://msdn.microsoft.com/en-us/library/ms733832.aspx
ist, dass falsche Verwendung der IExtensibleDataObject. Haben Sie Daten geändert haben, Vertrag auf der server-Seite ein, die Sie markiert haben neue Feld als erforderlich, damit es bedeutet, dass Sie gebrochen haben, Versionierung und nichts hilft Ihnen.
IExtensibleDataObject ist für einen anderen Zweck. Lassen Sie uns davon ausgehen, dass Sie geändert haben Ihren client so, dass die Daten-Vertrag auf dem client enthält MiddleName. Nun haben Sie die MiddleName und verwenden Sie die service-operation. Was Wert MiddleName wird zurückgegeben Mitarbeiter-Objekt? Wenn Sie nicht IExtensibleDataObject den Wert null, wenn Sie IExtensibleDataObject der Wert gleich, wie Sie den input-parameter.
Wenn mit DataContractSerializer WCF wirft Weg alle nicht verstanden-Parameter. IExtensibleDataObject dies vermeiden, indem alle diese Parameter in der special collection und senden Sie zurück an den client.
Wenn Sie verwenden möchten, Vertrag Versionierung vergessen Sie alle erforderlichen Felder aus. Das ist die erste Sache, die es brechen.
Beste Grüße,
Ladislav
Machen ExtensionData-Eigenschaft "Virtuell", wie unten gezeigt: