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

Kun*_*pal 10 ienumerable wcf

有些日子以来,我一直在尝试找到一个具体的答案,解释为什么IEnumerable类型在操作契约中将它们用作返回类型时会导致奇怪的错误.

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

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

mar*_*c_s 22

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

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

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

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

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

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