几天以来,我一直在尝试找到一个具体的答案,解释为什么 IEnumerable 类型在操作合约中使用它们作为返回类型时会导致奇怪的错误。
我遇到了很多文章和论坛帖子,但到目前为止我所知道的是如何使用其他替代解决方案(例如对象数组或通用列表列表)来防止错误。
我希望社区成员建议更相关的帖子或任何可以解释此 WCF 行为的参考材料。
WCF 使用消息传递系统 - 它将调用序列化并返回值到 XML 序列化消息中。
因此,它只能处理可以用 XML 模式表示的内容,而接口则不能用 XML 模式表示。
尝试使用具体类型 (a List<T>
或数组) - 这些应该可以正常工作。
有一些方法可以解决这个问题 - 但在此过程中您会牺牲与非 .NET 客户端的任何互操作性:您可以使用NetDataContractSerializer
(see 这篇博文和Aaron Skonnard 在 NetDataContractSerializer 上发表的文章);这样,您基本上就可以在序列化消息中嵌入额外的 .NET 运行时信息。这将使您的消息更大,任何非 .NET 客户端都无法理解这一点,但如果您控制线路的两端并且两端都仅是 .NET,那么这可能是一种解决方法。
这还支持使用接口作为服务方法参数 - 但不确定返回类型。
我通常不推荐这样做 - 但根据您的情况和需求,这可能是您的替代方案。一探究竟!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)