gpt4 book ai didi

c# - WCF OperationContract - 我应该公开哪种通用集合类型?

转载 作者:太空狗 更新时间:2023-10-29 17:33:03 25 4
gpt4 key购买 nike

我有一个 WCF Web 服务,它有一个返回通用集合的方法。现在,我的问题是:我应该将其公开为 ICollection<T> 吗? , List<T> , IList<T> , IEnumerable<T>或者是其他东西?

我想 List<T>这是不可能的,因为我想避免 CA1002 errors , 但基础类型将是 List<T> .

我真的很想听听你对此的看法,最好能很好地解释你为什么这么想。

提前致谢

最佳答案

请记住,CA1002 之类的错误确实适用于图书馆。 WCF 服务不是一个库,它是一个通过 SOAP、REST 等序列化所有内容的端点。

您会发现,如果您尝试公开一个接口(interface),例如 ICollection<T>IList<T> ,你会得到类型无法序列化的错误。事实上,List<T>可能是这里最好的选择。当在客户端生成代理时,它默认以数组形式结束,即使不是大多数人,也有很多人将其更改为 List<T>。 ,所以 90% 的时间,无论您选择如何公开它,这都是客户无论如何都会看到的类型。

我会注意到,一般而言,最好不要从 WCF 操作或 Web 服务中“返回”集合。创建一个包含所需集合的代理类并返回它更为常见,即:

[OperationContract]
OrdersResult GetOrders(OrderRequest request);

代理类可能如下所示:

[DataContract]
public class OrdersResult
{
[DataMember]
public List<Order> Orders { get; set; }
}

这样,如果您决定需要向请求或响应中添加更多数据,您可以这样做而不会对客户端造成破坏性更改。


附录:WCF 的真正问题是 WCF 不知道特定类型仅用于出站数据。 当通过 WCF 服务公开任何类时,WCF 假定它可以是请求响应的一部分,如果它是请求的一部分,则类型必须是具体的不能是不可变的。这就是所有其他愚蠢限制的原因,例如需要属性 setter 。

您别无选择,只能使用具体的、可变的集合类型,在大多数情况下,这意味着数组或通用列表。

关于c# - WCF OperationContract - 我应该公开哪种通用集合类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com