2012-05-08 30 views
8

Tôi có một lớp học C# được định nghĩa như sau:Serialize Generic loại trên WCF Service

public class GenericItem<T> 
{ 
    public List<T> Items { get; set; } 

    public DateTime TimeStamp { get; set; } 
} 

tôi đang tạo ra một thể hiện của lớp này trên máy chủ của tôi. Sau đó tôi cố gắng chuyển nó qua dây thông qua một dịch vụ WCF như được hiển thị ở đây:

[OperationContract] 
public GenericItem<MyCustomType> GetResult() 
{ 
    GenericItem<MyCustomType> result = BuildGenericItem(); 
    return result; 
} 

Mọi thứ đều chỉ tốt vào thời điểm này. Khi tôi "cập nhật tham chiếu dịch vụ" trong ứng dụng Silverlight của tôi để biên dịch lại, tôi nhận được lỗi biên dịch, tương tự như sau:

MyNamespace.GenericItemOfMyCustomType [extra chars] không chứa định nghĩa công khai cho 'GetEnumerator '

tôi không có ý tưởng tại sao:

  1. chars tắm đang xuất hiện. Dường như thay đổi mọi lúc tôi cập nhật tham chiếu dịch vụ.
  2. Cách khắc phục sự cố này.

Tôi đang làm gì sai?

Trả lời

7

Sleiman là đúng, nhưng người ta có thể sử dụng Bounded Generics như mô tả trong this article, và bạn có thể đạt được những gì bạn muốn. Điều này cho phép bạn tạo một loại chung trong dịch vụ và hiển thị nó. Nhưng người tiêu dùng sẽ không xem nó như là chung chung như loại được chỉ định trong hoạt động dịch vụ.

5

Bạn không thể xác định hợp đồng WCF dựa trên các thông số loại chung. Generics là dành riêng cho .NET và việc sử dụng chúng sẽ vi phạm bản chất hướng dịch vụ của WCF. Tuy nhiên, một hợp đồng dữ liệu có thể bao gồm một bộ sưu tập như một thành viên dữ liệu vì WCF cung cấp các quy tắc marshaling chuyên dụng cho các bộ sưu tập.

-3

Bạn có thể sử dụng sau đây trên các mặt hàng thay vì sử dụng servicereference:

var myBinding = new BasicHttpBinding(); 
var myEndpoint = new EndpointAddress(""); 
var myChannelFactory = new ChannelFactory<IService>(myBinding, myEndpoint); 
IService gks = myChannelFactory.CreateChannel(); 

trình cho generics.

+0

điều này thậm chí không liên quan đến từ xa đến câu hỏi trong tầm tay. – Seabizkit