Web服务抽象类型作为返回值

时间:2011-08-29 16:26:07

标签: c# .net web-services asmx

我在网络项目中使用Web服务 我写了一个返回IEnumerable的Web服务:

[WebMethod]
public IEnumerable<Something> GetSomething() {
    IEnumerable<Something> result = ....
    ....
    return result;
}

现在,result可以是任何实现IEnumerable的东西,因此可以将非常复杂的对象发送给客户端。
你怎么看?是否更好地返回特定类型然后返回抽象类型(因为不知道返回类型)? 例如,我可以为IEnumerable创建一个DTO类,它包含简单的arrey或类似的东西 这个问题的最佳做法是什么?

更新:
我使用的是SeriptService和JSon,而不是SOAP Xml。到目前为止,我能够返回IEnumerable - 可能因为底层可枚举是序列化项目。你觉得怎么样?

2 个答案:

答案 0 :(得分:0)

一般来说,这可能没问题,因为您指定了对象的具体类型,即在您的情况下Something

DTO的使用通常仅用于

  • 通过webservice s.t将您的对象模型与暴露给您的客户端的对象模型分离。当您的模型发生变化时,您不会有破坏webservice-api的风险
  • 减少传输到客户端的数据量。目标是尽可能保持Web服务调用的性能,因此您应该优化发送给客户端的数据。

答案 1 :(得分:0)

大多数序列化程序都可以轻松地序列化

IEnumerable。 它只是一个可以查询以获取项目列表的值。

这里需要注意的是,如果你使用yield return来创建枚举,那么生成枚举的方法代码将在序列化程序开始从枚举中获取对象并开始解码它们时执行。因此,即使您在使用yield return模式生成可枚举的方法内部进行数据库调用,该数据库调用也将在Web方法中的return语句之后发生,即当序列化程序开始使用可枚举时。