Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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. Ancak, düzgün çalışabilmesi için round-tripping gibi bir sürümleme özelliğinin ilk sürümden itibaren türe yerleşik olarak eklenmiş olması gerekir.
Round-Tripping
Gidiş-dönüş, veriler yeni bir versiyondan eski bir versiyona geçip tekrar veri sözleşmesinin yeni versiyonuna döndüğünde gerçekleşir. Veri geçişi, veri kaybı olmamasını garanti eder. İleriye dönük uyumluluğu sağlamak için çift yönlü veri akışını etkinleştirmek, türün veri sözleşmesi sürümleme modeli tarafından desteklenen gelecekteki değişikliklerle uyumlu hâle gelmesini sağlar.
Belirli bir tür için döngüsel işlemeyi etkinleştirmek amacıyla, türün IExtensibleDataObject arabirimini uygulaması gerekir. Arabirim, tek bir ExtensionData özelliği içerir (bu özellik ExtensionDataObject türünü döndürür). ö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, bu veriler, altyapının bir ö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.
İşlem tekrarı özelliği, ignoreExtensionDataObject değerini true olarak yapıcıda ayarlayarak veya DataContractSerializer özelliğini IgnoreExtensionDataObject olarak true üzerinde ayarlayarak kapatılabilir. Bu özellik kapalı olduğunda, seri durumdan çıkarıcı ExtensionData özelliğini doldurmaz ve seri hale getirici, bu özelliğin içeriğini yayımlamaz.