2016-03-23 12 views
0

SVCUTIL.exeを使用してプロキシクラスを生成するか、またはVSからサービス参照を追加すると、既定でIExtensibleDataObjectがデータコントラクトクラスに継承されます。クライアント側ではVSと従業員の複合クラスからサービス参照を追加することによって生成されたProxyでデフォルトでIExtensibleDataObjectを実装する

WCFデータコントラクト

[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; 
     } 
    } 

プロキシクラスにもかかわらず、デフォルトでIExtensibleDataObjectインタフェースを継承しますサービス終了時にこれを実装しないでください。

クライアント側従業員クラス

[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"); 
       } 
      } 
     } 

今の質問は、(例の場合:Javaの)いくつかの他のクライアントからプロキシを生成しますがされ、彼らはデフォルトでIExtensibleDataObjectインターフェイスを実装しますか?

答えて

0

いいえ、IExtensibleDataObjectは.Net Frameworkのインターフェイスです。 サービスがなくてもサービスが実行されます。それは契約に存在しない余分なデータを格納するための方法を提供する:

IExtensibleDataObjectインタフェースは、 セット単一のプロパティを提供するか、 データコントラクトの外部にあるデータを格納するために使用される構造体を返します。余分なデータは、 ExtensionDataObjectクラスのインスタンスに格納され、ExtensionData プロパティを介してアクセスされます。データが受信され、処理された のラウンドトリップオペレーションでは、余分なデータが元の送信者 にそのまま送信されます。これは、契約書の の将来のバージョンから受信したデータを保存するのに便利です。インターフェイスを実装していない場合は、往復操作中に余分なデータが無視され、破棄されます( )。

あなたがここで詳細を読むことができます:https://msdn.microsoft.com/en-us/library/system.runtime.serialization.iextensibledataobject%28v=vs.100%29.aspx

は、それは私がサービスデータ契約でIExtensibleDataObjectを実装する場合、私はWSDLでこれに関する情報を見つけることができませんでし

+0

お役に立てば幸いです。したがって、非ネットクライアント(Java)がプロキシを生成する場合、ラウンドトリップ中にデータ損失が回避される方法は?それらは、.netフレームワーク(IExtensibleDataObject)と同様に、別個のインターフェイスを持っていますか? – vellaichamy

+0

Javaや他の言語に同等の実装があるかどうかわかりませんが、とにかく、IExtensibleDataObjectは契約の将来のバージョンから受け取ったデータを保存するのに便利です。正しいバージョンの契約を実装すると問題はありませんネットクライアントはありません。 –

関連する問題