【问题标题】:How to return IEnumerable<T> from web service如何从 Web 服务返回 IEnumerable<T>
【发布时间】:2011-01-18 00:32:54
【问题描述】:

我想知道为什么我不能通过网络服务返回IEnumerable&lt;T&gt;

在我的网络服务中,我返回一个 IEnumerable&lt;T&gt;,但是当我在 VS 2010 中检查 IntelliSense 时,我发现它给了我一个 T[]

有人可以解释一下这种行为吗?

【问题讨论】:

  • 您询问的是 ASMX Web 服务还是 WCF?两者的答案不同。

标签: c# .net web-services generics c#-4.0


【解决方案1】:

来自MSDN

我可以在 Web 服务中使用泛型吗?

很遗憾,没有。 Web 服务必须公开基于 WSDL 的契约。这样的契约总是受到所使用的消息格式的表达能力的限制。例如,基于 HTTP-GET 的 Web 服务仅支持原始类型(如 int 或 string),但不支持复杂类型(如 DataSet)。基于 SOAP 的 Web 服务功能更强大,但 SOAP 无法表示泛型类型参数。因此,目前您无法定义依赖泛型类型的 Web 服务。也就是说,您可以定义依赖于封闭构造的泛型类型的 .NET Web 服务,例如:

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

在上面的示例中,List 将被编组为字符串数组。

【讨论】:

    【解决方案2】:

    数组T[]支持IEnumerable&lt;T&gt;

    正在返回IEnumerable&lt;T&gt;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多