Aracılığıyla paylaş


İ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 trueignoreExtensionDataObject 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.

Ayrıca bkz.