İleri Uyumlu Veri Sözleşmeleri
Windows Communication Foundation (WCF) veri sözleşmesi sisteminin bir özelliği, sözleşmelerin zaman içinde bölünemez yollarla gelişebiliyor olmasıdır. Diğer bir ifadeyle, veri sözleşmesinin eski bir sürümüne sahip bir istemci, aynı veri sözleşmesinin daha yeni bir sürümüne sahip bir hizmetle veya veri sözleşmesinin daha yeni bir sürümüne sahip bir istemci aynı veri sözleşmesinin eski bir sürümüyle iletişim kurabilir. Daha fazla bilgi için bkz . En İyi Yöntemler: Veri Sözleşmesi Sürüm Oluşturma.
Mevcut bir veri sözleşmesinin yeni sürümleri oluşturulduğunda sürüm oluşturma özelliklerinin çoğunu gerektiği gibi uygulayabilirsiniz. Bununla birlikte, düzgün çalışabilmek için ilk sürümden bir sürüm oluşturma özelliğinin (yuvarlama) türüne yerleşik olarak bulunması gerekir.
Yuvarlak Damlama
Yuvarlama, veriler yeni bir sürümden eski bir sürüme geçtiğinde ve bir veri sözleşmesinin yeni sürümüne geri döndüğünde gerçekleşir. Yuvarlama, veri kaybı olmamasını garanti eder. Yuvarlak kopyalamayı etkinleştirmek, türün veri sözleşmesi sürüm oluşturma modeli tarafından desteklenen gelecekteki değişikliklerle ileriye doğru uyumlu olmasını sağlar.
Belirli bir tür için yuvarlak kopyalamayı etkinleştirmek için türün arabirimi uygulaması IExtensibleDataObject gerekir. Arabirim tek ExtensionData bir özellik içerir (türü döndürür ExtensionDataObject ). özelliği, geçerli sürümde bilinmeyen veri sözleşmesinin gelecek sürümlerindeki tüm verileri depolar.
Örnek
Aşağıdaki veri sözleşmesi gelecekteki değişikliklerle ileriye doğru uyumlu değildir.
[DataContract]
public class Person
{
[DataMember]
public string fullName;
}
<DataContract()> _
Public Class Person
<DataMember()> _
Public fullName As String
End Class
Türü gelecekteki değişikliklerle uyumlu hale getirmek için ("phoneNumber" adlı yeni bir veri üyesi eklemek gibi) arabirimini IExtensibleDataObject uygulayın.
[DataContract]
public class Person : IExtensibleDataObject
{
[DataMember]
public string fullName;
private ExtensionDataObject theData;
public virtual ExtensionDataObject ExtensionData
{
get { return theData; }
set { theData = value; }
}
}
<DataContract()> _
Public Class Person
Implements IExtensibleDataObject
<DataMember()> _
Public fullName As String
Private theData As ExtensionDataObject
Public Overridable Property ExtensionData() As _
ExtensionDataObject Implements _
IExtensibleDataObject.ExtensionData
Get
Return theData
End Get
Set
theData = value
End Set
End Property
End Class
WCF altyapısı özgün veri sözleşmesinin parçası olmayan verilerle karşılaştığında, veriler özelliğinde depolanır ve korunur. Geçici depolama dışında başka bir şekilde işlenmez. Nesne, kaynaklandığı yere geri döndürülürse, özgün (bilinmeyen) veriler de döndürülür. Bu nedenle veriler, kaynak uç noktaya kayıpsız gidiş dönüş yapmıştır. Ancak, kaynak uç nokta verilerin işlenmesini gerektiriyorsa bu beklentinin karşılanmadığını ve uç noktanın değişikliği bir şekilde algılayıp barındırması gerektiğini unutmayın.
Türü ExtensionDataObject genel yöntem veya özellik içermiyor. Bu nedenle, özelliğin içinde ExtensionData depolanan verilere doğrudan erişim elde etmek mümkün değildir.
Yuvarlama özelliği, oluşturucuda DataContractSerializer olarak ayarlanarak true
ignoreExtensionDataObject
veya özelliği true
üzerinde ServiceBehaviorAttributeolarak ayarlanarak IgnoreExtensionDataObject kapatılabilir. Bu özellik kapalı olduğunda seri durumdan çıkarıcı özelliği doldurmaz ExtensionData ve seri hale getirici özelliğin içeriğini yaymaz.