在IE中使用IEnumerable类型作为返回类型的问题

时间:2011-05-02 04:52:29

标签: wcf ienumerable

我一直在努力寻找一个具体的答案,解释为什么IEnumerable类型在操作契约中将它们用作返回类型时会导致奇怪的错误。

我发现很多文章和论坛发布,但我现在所拥有的是如何防止其他替代解决方案的错误,如对象数组或通用列表List。

我希望社区成员建议更相关的帖子或任何可以解释此WCF行为的参考资料。

1 个答案:

答案 0 :(得分:22)

WCF使用消息传递系统 - 它将调用序列化并将值返回到XML序列化消息中。

因此,它只能处理可以用XML模式表达的东西 - 而接口在XML模式中是不可表达的。

尝试使用具体类型(一个List<T>或数组) - 那些应该可以正常工作。

有一些方法可以解决这个问题 - 但是您在此过程中牺牲了与非.NET客户端的任何互操作性:您可以使用NetDataContractSerializer(请参阅this blog postarticle by Aaron Skonnard on NetDataContractSerializer );有了这个,你基本上在序列化的消息中嵌入了额外的.NET运行时信息。这将使您的消息变得更大,并且任何非.NET客户端都不会理解这一点,但如果您控制线路的两端并且两端都只是.NET,那么这可能是一种解决方法。

这也支持使用接口作为服务方法参数 - 但不确定返回类型。

我通常不建议这样做 - 但根据您的情况和您的需求,这可能是您的替代选择。看看吧!