我已经把我的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的使用感到困惑。
最佳答案
恐怕这不是iextensibledataobject的正确用法,iextensibledataobject接口是为支持版本往返而设计的,请阅读下面关于转发兼容性的msdn文章:
http://msdn.microsoft.com/en-us/library/ms731083.aspx
下面是另一篇关于数据合同版本控制的最佳实践的文章:
http://msdn.microsoft.com/en-us/library/ms733832.aspx