tôi có hai lớp dữ liệu chỉ chứa các thành viên dữ liệu (không có chức năng). Một là CallTask khác là SmsTask. Hai lớp này có một số thuộc tính phổ biến như ID, ĐT. Tôi đặt các thuộc tính phổ biến trong một lớp giao diện riêng biệt và tôi sử dụng lớp giao diện này trong dự án của tôi bất cứ khi nào thích hợp.
Bây giờ tôi đã thêm một WCFService vào dự án của tôi để chia sẻ dữ liệu giữa máy khách và máy chủ. Hãy xem xét việc thiết kế lớp sau đây:
cách đánh dấu giao diện là DataContract trong WCF
public interface IGsmTask : IComparable
{
string TaskID { get; set; }
string SessionID { get; set; }
string Tel { get; set; }
}
class CallTask : IGsmTask
{
#region IGsmTask Members
public string TaskID { get; set; }
public string SessionID { get; set; }
public string Tel { get; set; }
#endregion
}
class SmsTask : IGsmTask
{
#region IGsmTask Members
public string TaskID { get; set; }
public string SessionID { get; set; }
public string Tel { get; set; }
#endregion
public string SmsText { get; set; }
}
trong thiết kế này, tôi muốn lưu trữ CallTask, SmsTask, và IGsmTask cho khách hàng sử dụng các dịch vụ trong methots như sau;
[OperationContract]
public void AddTask(IGsmTask task)
{
}
tôi đã cố gắng để đánh dấu [DataContract] trên IGsmTask nhưng nó mang lại cho tôi lỗi complition. Không có bất kỳ methot mà tôi có thể sử dụng giao diện như DataContracts? Hoặc làm thế nào tôi nên sử dụng KnownAttributes loại trong synerio này?
Cảm ơn.
thay đổi giao diện thành lớp – Reniuz
Cảm ơn Reniuz có vẻ như tôi không thể sử dụng giao diện cho mục đích này. – Fer
WCF là một hệ thống ** dựa trên tin nhắn ** - máy khách gửi một thông báo XML-serialized đến máy chủ. Như vậy, các thông điệp đó phải là ** các loại cụ thể ** có thể được tuần tự hóa thành XML và được biểu diễn bằng một lược đồ XML. Giao diện không thể được tuần tự hóa thành XML .... –