Freigeben über


Aufwärtskompatible Datenverträge

Ein Merkmal des Windows Communication Foundation (WCF)-Datenvertragssystems ist, dass sich Verträge im Laufe der Zeit ohne Unterbrechung weiterentwickeln können. Dies bedeutet, dass ein Client mit einer älteren Version eines Datenvertrags mit einem Dienst, der eine neuere Version dieses Datenvertrags aufweist, kommunizieren kann bzw. dass ein Client mit einer neueren Version eines Datenvertrags mit einer älteren Version dieses Datenvertrags kommunizieren kann. Weitere Informationen finden Sie unter Empfohlene Vorgehensweisen: Versionsverwaltung von Datenverträgen.

Sie können beim Erstellen neuer Versionen eines bestehenden Datenvertrags die meisten Versionsverwaltungsfeatures nach Bedarf verwenden. Ein Versionsverwaltungsfeature, der Roundtrip, muss jedoch von Anfang an in den Typ integriert werden, damit er richtig funktioniert.

Roundtrip-Feature

Ein Roundtrip findet statt, wenn Daten von einer neuen Version an eine alte Version und wieder zurück an die neue Version eines Datenvertrags übergeben werden. Durch den Roundtrip wird sichergestellt, dass keine Daten verloren gehen. Durch das aktivierte Roundtrip-Feature wird der Typ aufwärtskompatibel, das heißt, dass alle zukünftigen Änderungen vom Versionsverwaltungsmodell des Datenvertrags unterstützt werden.

Um das Roundtrip-Feature für einen bestimmten Typ zu aktivieren, muss der Typ die IExtensibleDataObject-Schnittstelle implementieren. Die Schnittstelle enthält die ExtensionData-Eigenschaft (und gibt den ExtensionDataObject-Typ zurück). In der Eigenschaft werden alle Daten aus zukünftigen Versionen des Datenvertrags, die in der aktuellen Version unbekannt sind, gespeichert.

Beispiel

Der folgende Datenvertrag ist nicht mit zukünftigen Änderungen aufwärtskompatibel:

Damit der Typ mit zukünftigen Änderungen (wie zum Beispiel einem hinzugefügten Datenmember "phoneNumber") kompatibel wird, muss die IExtensibleDataObject-Schnittstelle implementiert werden.

Wenn die WCF-Infrastruktur auf Daten trifft, die nicht zum ursprünglichen Datenvertrag gehören, werden die Daten in der Eigenschaft gespeichert und so aufbewahrt. Eine Verarbeitung erfolgt nur für die vorübergehende Speicherung. Wird das Objekt an seinen Ursprungsort zurückgegeben, werden die ursprünglichen (unbekannten) Daten ebenfalls zurückgegeben. Auf diese Weise durchlaufen die Daten ohne Verlust einen Roundtrip zum und vom ursprünglichen Endpunkt. Beachten Sie jedoch, dass der Endpunkt die Änderungen selbst erkennen und umsetzen muss, falls der ursprüngliche Endpunkt eine Verarbeitung der Daten erfordert und diese Voraussetzung nicht erfüllt werden kann.

Der ExtensionDataObject-Typ enthält keine öffentlichen Methoden oder Eigenschaften. Daher kann nicht direkt auf die in der ExtensionData-Eigenschaft gespeicherten Daten zugegriffen werden.

Sie können das Roundtrip-Feature deaktivieren. Legen Sie hierfür entweder ignoreExtensionDataObject im DataContractSerializer-Konstruktor auf true fest, oder legen Sie die IgnoreExtensionDataObject-Eigenschaft im ServiceBehaviorAttribute auf true fest. Wenn dieses Feature deaktiviert ist, wird die ExtensionData-Eigenschaft nicht vom Deserialisierungsprogramm gefüllt, und der Inhalt der Eigenschaft wird nicht vom Serialisierungsprogramm ausgegeben.

Siehe auch

Referenz

IExtensibleDataObject
ExtensionDataObject

Konzepte

Datenvertragsversionsverwaltung
Empfohlene Vorgehensweisen: Versionsverwaltung von Datenverträgen