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

本文关键字:返回值 类型 抽象类 服务 抽象 Web | 更新日期: 2023-09-27 18:06:52

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

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

现在,result可以是任何实现IEnumerable的对象,因此可以是发送给客户端的非常复杂的对象。
你觉得呢?返回特定类型比返回抽象类型好吗(因为不知道返回类型)?
例如,我可以为IEnumerable创建一个DTO类,它保存简单的数组或类似的东西。
解决这个问题的最佳实践是什么?

更新:
我使用SeriptService与JSon,而不是与SOAP Xml。到目前为止,我还能返回IEnumerable——也许是因为底层的enumerable是序列化的item。你觉得呢?

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

一般来说,当您指定对象的具体类型时,这可能是好的,例如在您的情况下Something

DTO的用法通常只用于

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

IEnumerable将很容易被大多数序列化器序列化。它只是一个值,可以通过查询得到项目列表。

这里你需要注意的一点是,如果你使用yield return来创建可枚举对象,那么当序列化器开始从可枚举对象中获取对象并开始解码时,生成可枚举对象的方法代码将执行。因此,即使你在使用yield返回模式生成enumerable的方法中有一个数据库调用,该数据库调用也会在你的web方法中的返回语句之后发生,即当序列化器开始消费enumerable时。

相关文章: