Verwendung von IExtensibleDataObject in Clients

7

Ich habe meinen Webservice in den Dienst wcf umgewandelt, der einige Datenverträge enthält. Als Best Practice wird erwähnt und empfohlen, dass die DataContracts von IExtensibleDataObject erben sollten. Ich bekomme den Punkt, dass IExtensibleDataObject beim Hinzufügen oder Entfernen von Datenmember hilfreich ist. Aber ich kann nicht herausfinden, wie die Clients auf entfernte Daten zugreifen werden. Hier ist mein Code:

%Vor%

Nun habe ich in meiner nächsten Version von Webservice einige Änderungen an DataContract vorgenommen als

%Vor%

Allerdings erhält mein Client, der auf meine ältere Version des Webdienstes zugreift, jetzt einen Fehler, weil er das Feld "MiddleName" nicht angibt. Ich bin immer noch verwirrt für die Verwendung von IExtensionDataObject.

    
Ashish 08.08.2010, 10:59
quelle

3 Antworten

12

Ich fürchte, das ist nicht die korrekte Verwendung von IExtensibleDataObject, die IExtensibleDataObject-Schnittstelle wurde entwickelt, um das Round-Triping von Versionen zu unterstützen. Lesen Sie diesen MSDN-Artikel zur Vorwärtskompatibilität:

Ссылка

Und hier ist ein weiterer Artikel zu den besten Vorgehensweisen bei der Data Contract-Versionierung im Allgemeinen: Ссылка

    
theburningmonk 08.08.2010, 22:28
quelle
12

Dies ist eine falsche Verwendung von IExtensibleDataObject. Sie haben den Datenvertrag auf der Server-Seite geändert und Sie haben ein neues Feld wie gewünscht markiert. Das bedeutet, dass Sie die Versionierung nicht mehr durchführen können und Ihnen nichts hilft.

IExtensibleDataObject ist für andere Zwecke. Angenommen, Sie haben Ihren Client so geändert, dass der Datenvertrag auf dem Client MiddleName enthält. Jetzt legen Sie den MiddleName fest und verwenden Service hinzufügen. Welchen Wert von MiddleName hat das zurückgegebene Mitarbeiterobjekt? Wenn Sie IExtensibleDataObject nicht verwenden, ist der Wert null. Wenn Sie IExtensibleDataObject verwenden, ist der Wert derselbe wie für den Eingabeparameter.

Wenn Sie DataContractSerializer verwenden, verwirft WCF alle nicht verstandenen Parameter. IExtensibleDataObject vermeidet dies, indem alle diese Parameter in einer speziellen Sammlung gespeichert und zurück an den Client gesendet werden.

Wenn Sie die Vertragsversionierung verwenden möchten, vergessen Sie die erforderlichen Felder. Das ist das erste, was es brechen wird.

Mit freundlichen Grüßen, Ladislav

    
Ladislav Mrnka 08.08.2010 20:42
quelle
0

Machen Sie die ExtensionData-Eigenschaft "Virtual" wie unten gezeigt:

%Vor%     
Praveen 13.01.2014 14:17
quelle