Proxy

2016-03-23 49 views
0

üzerinde IExtensibleDataObject öğesini uygulayarak SVCUTIL.exe veya VS'den hizmet başvurusu ekleyerek proxy sınıfı üreten Whiel, varsayılan olarak veri sözleşmesi sınıflarına IExtensibleDataObject öğesini devralır. Proxy

WCF veri sözleşme istemci tarafında VS ve Çalışan kompozit sınıfından ekleyerek servis referans olarak oluşturulan

[DataContract] 
public class Employee 
{ 
    [DataMember(Order = 1)] 
    public string Id { get; set; } 
} 

WCF Servcie

public class Service1 : IService1 
    { 
     public Employee GetEmployeeById(Employee employee) 
     { 
      return employee; 
     } 
    } 

Vekil Sınıf rağmen varsayılan olarak IExtensibleDataObject arayüzü devralır Bunu yapmam, servis ucunda bunu yapmam.

başka müşteriden vekil üretilirken

[System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 
    [System.Runtime.Serialization.DataContractAttribute(Name="Employee", Namespace="http://schemas.datacontract.org/2004/07/WcfService1")] 
    [System.SerializableAttribute()] 
    public partial class Employee : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { 

     [System.NonSerializedAttribute()] 
     private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

     [System.Runtime.Serialization.OptionalFieldAttribute()] 
     private string IdField; 


     [global::System.ComponentModel.BrowsableAttribute(false)] 
     public System.Runtime.Serialization.ExtensionDataObject ExtensionData { 
      get { 
       return this.extensionDataField; 
      } 
      set { 
       this.extensionDataField = value; 
      } 
     } 

     [System.Runtime.Serialization.DataMemberAttribute()] 
     public string Id { 
      get { 
       return this.IdField; 
      } 
      set { 
       if ((object.ReferenceEquals(this.IdField, value) != true)) { 
        this.IdField = value; 
        this.RaisePropertyChanged("Id"); 
       } 
      } 
     } 

Şimdi soru, (Örneğin: Java) olduğu İstemci tarafı Çalışan Sınıf, bunlar varsayılan olarak IExtensibleDataObject arabirimini uygulayacak?

cevap

0

Hayır, çünkü IExtensibleDataObject, .Net Framework'den bir arabirimdir. Servis, onsuz bile çalışır. O sözleşmede mevcut olmadığı, ekstra veri depolamak için bir yol sağlar:

IExtensibleDataObject arayüzü setleri veya veri sözleşme harici olan verileri saklamak için kullanılan bir yapı döndüren tek bir özellik sağlar. Ek veri ExtensionDataObject sınıfının bir örneğinde depolanır ve ExtensionData özelliğiyle erişilir. Verilerin alındığı, işlendiği, ve geri gönderildiği bir gidiş-dönüş operasyonunda, ekstra veriler orijinal göndericiye gönderilir. Bu, sözleşmenin sonraki sürümlerinden alınan verileri saklamak için kullanışlıdır. Arayüzü uygulamıyorsanız, herhangi bir ek veri göz ardı edilir ve bir gidiş dönüş operasyonu sırasında atılır.

Burada daha fazla bilgi edinebilirsiniz: https://msdn.microsoft.com/en-us/library/system.runtime.serialization.iextensibledataobject%28v=vs.100%29.aspx

Ben hizmet veri sözleşme IExtensibleDataObject uygularsanız o

+0

yardımcı olur umarım, ben WSDL içinde bu konuda herhangi bir bilgi bulmak olabilir mümkün değildir. Yani, non.net istemcisi (Java) proxy oluşturuyorsa, gidiş gelişte veri kaybını nasıl önleyeceksiniz? .net framework (IExtensibleDataObject) gibi herhangi bir ayrı arayüzü var mı? – vellaichamy

+0

Java ya da başka bir dil eşdeğer bir uygulama olup olmadığını bilmiyorum, IExtensibleDataObject sözleşmenin doğru sürümünü uygularsanız, sözleşmenin gelecekteki sürümlerinden alınan verileri saklamak için yararlıdır, herhangi bir sorun yaşamayacaksınız Net istemciler yok. –