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インターフェイスを実装しますか?
お役に立てば幸いです。したがって、非ネットクライアント(Java)がプロキシを生成する場合、ラウンドトリップ中にデータ損失が回避される方法は?それらは、.netフレームワーク(IExtensibleDataObject)と同様に、別個のインターフェイスを持っていますか? – vellaichamy
Javaや他の言語に同等の実装があるかどうかわかりませんが、とにかく、IExtensibleDataObjectは契約の将来のバージョンから受け取ったデータを保存するのに便利です。正しいバージョンの契約を実装すると問題はありませんネットクライアントはありません。 –