Tôi đã chuyển đổi dịch vụ web của mình sang dịch vụ wcf có một số thuật toán dữ liệu. Như một thực hành tốt nhất, nó được đề cập và khuyến khích rằng DataContracts nên kế thừa từ IExtensibleDataObject. Tôi nhận được điểm rằng trong trường hợp bổ sung hoặc loại bỏ các datamembers, IExtensibleDataObject là hữu ích. Nhưng tôi không thể có được làm thế nào các khách hàng sẽ truy cập các datamembers bị loại bỏ. Đây là mã của tôi:Sử dụng IExtensibleDataObject trong ứng dụng khách
[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; }
}
Bây giờ trong phiên bản tiếp theo của tôi về dịch vụ web tôi đã thực hiện một số thay đổi để DataContract như
[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; }
}
Tuy nhiên khách hàng của tôi mà được truy cập vào phiên bản cũ của tôi về dịch vụ web hiện đang nhận được lỗi vì không cung cấp trường MiddleName. Tôi vẫn còn bối rối cho việc sử dụng IExtensionDataObject.
Điều gì không chính xác? .NET tạo ra trường sao lưu tự động - và tài liệu của Microsoft không giải thích tại sao nó cần phải là ảo và tại sao nó cần trường sao lưu theo cách thủ công được chỉ định. – ShadowChaser