我已将我的 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 的使用感到困惑。