Web サービスを、いくつかのデータ契約を持つ wcf サービスに変換しました。ベスト プラクティスとして、DataContracts は IExtensibleDataObject から継承することが推奨されます。データメンバーの追加または削除の場合、IExtensibleDataObject が役立つという点がわかりました。しかし、クライアントが削除されたデータメンバーにアクセスする方法を取得できません。これが私のコードです:
[ServiceContract(Namespace = "http://mycompany.com/2010/08/")]
public class MyWebService {
[OperationContract]
public Employee Add(Employee emp)
{
// Some Processing
}
}
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/08/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
public ExtensionDataObject ExtensionData { get; set; }
}
次のバージョンの Web サービスでは、次のように DataContract にいくつかの変更を加えました。
[DataContract(Name = "Employee", Namespace = "http://mycompany.com/2010/09/")]
public class Employee : IExtensibleDataObject {
[DataMember] public string FirstName;
[DataMember] public string LastName;
[DataMember(IsRequired = true)] public string MiddleName;
public ExtensionDataObject ExtensionData { get; set; }
}
ただし、古いバージョンの Web サービスにアクセスしているクライアントは、MiddleName フィールドを指定していないというエラーが発生しています。IExtensionDataObject の使用についてはまだ混乱しています。