2011-01-18 24 views
5

Tôi đã tự hỏi tại sao tôi không thể trả lại IEnumerable<T> thông qua dịch vụ web.Cách trả lại số điện thoại <T> từ dịch vụ web

Trong dịch vụ web của tôi, tôi trả về IEnumerable<T> nhưng khi tôi kiểm tra IntelliSense trong VS 2010, tôi thấy nó cho tôi một số T[].

Ai đó có thể cho tôi giải thích về hành vi này không?

+0

Bạn có yêu cầu về một dịch vụ web ASMX, hoặc WCF? Các câu trả lời là khác nhau giữa hai. –

Trả lời

8

Từ MSDN:

Tôi có thể sử dụng Generics trong Web Services?

Thật không may, không. Các dịch vụ Web phải vạch ra một hợp đồng dựa trên WSDL. Các hợp đồng như vậy luôn bị giới hạn bởi tính biểu cảm của định dạng tin nhắn đang được sử dụng. Ví dụ, các dịch vụ web dựa trên HTTP-GET chỉ hỗ trợ các kiểu nguyên thủy như int hoặc string, nhưng không hỗ trợ các kiểu phức tạp như một DataSet. Các dịch vụ web dựa trên SOAP có nhiều khả năng hơn, nhưng SOAP không có khả năng biểu diễn các tham số kiểu chung chung. Kết quả là, hiện tại, bạn không thể xác định các dịch vụ web dựa trên các kiểu generic. Điều đó nói rằng, bạn có thể xác định các dịch vụ web NET dựa trên các loại chung xây dựng khép kín, ví dụ:

public class MyWebService 
{ 
    [WebMethod] 
    public List<string> GetCities() 
    { 
     List<string> cities = new List<string>(); 
     cities.Add("New York"); 
     cities.Add("San Francisco"); 
     cities.Add("London"); 
     return cities; 
    } 
} 

Trong ví dụ trên, Danh sách sẽ được marshaled như một mảng các chuỗi.

0

Mảng T[] hỗ trợ IEnumerable<T>

Bạn được trở IEnumerable<T>

public IEnumerable<T> Something() 
    { 
     return new T[] {}; 
    } 
+0

meh, bất cứ điều gì ... – CRice

+0

Tôi không sai, mặc dù nó ... – CRice

Các vấn đề liên quan