2011-01-18 21 views
5

Me preguntaba por qué no puedo devolver un IEnumerable<T> a través de un servicio web.Cómo devolver IEnumerable <T> desde el servicio web

En mi servicio web devuelvo un IEnumerable<T> pero cuando reviso el IntelliSense en VS 2010 veo que me da un T[].

¿Alguien me puede dar una explicación para este comportamiento?

+0

¿Usted está preguntando acerca de un servicio web ASMX o WCF? Las respuestas son diferentes entre los dos. –

Respuesta

8

De MSDN:

puedo usar los genéricos en los servicios web?

Lamentablemente, no. Los servicios web deben exponer un contrato basado en WSDL. Dichos contratos siempre están limitados por la expresividad del formato del mensaje que se utiliza. Por ejemplo, los servicios web basados ​​en HTTP-GET solo admiten tipos primitivos como int o string, pero no tipos complejos como un DataSet. Los servicios web basados ​​en SOAP son más capaces, pero SOAP no tiene la capacidad de representar parámetros genéricos de tipo. Como resultado, en este momento, no puede definir servicios web que dependan de tipos genéricos. Dicho esto, se pueden definir los servicios web .NET que se basan en tipos genéricos construidos cerrados, por ejemplo:

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; 
    } 
} 

En el ejemplo anterior, la lista se calculan como una matriz de cadenas.

0

matriz T[] apoya IEnumerable<T>

Usted están regresandoIEnumerable<T>

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

meh, lo que sea ... – CRice

+0

No estoy equivocado, lo hace ... – CRice

Cuestiones relacionadas