有些日子以来,我一直在尝试找到一个具体的答案,解释为什么IEnumerable类型在操作契约中将它们用作返回类型时会导致奇怪的错误.
我发现了许多文章和论坛发布,但我现在所拥有的是如何防止其他替代解决方案的错误,如对象数组或通用列表List.
我希望社区成员建议更相关的帖子或任何可以解释此WCF行为的参考资料.
mar*_*c_s 22
WCF使用消息传递系统 - 它将调用序列化并将值返回到XML序列化消息中.
因此,它只能处理可以用XML模式表达的东西 - 并且接口在XML模式中是不可表达的.
尝试使用具体类型(a List<T>或数组) - 那些应该可以正常工作.
有一些方法可以解决这个问题 - 但是你在这个过程中牺牲了与非.NET客户端的任何互操作性:你可以使用NetDataContractSerializer(参见这篇博文和Aaron Skonnard关于NetDataContractSerializer的文章); 有了这个,你基本上在序列化的消息中嵌入了额外的.NET运行时信息.这将使您的消息变得更大,并且任何非.NET客户端都不会理解这一点,但是如果您控制线路的两端并且两端都只是.NET,那么这可能是一种解决方法.
这也支持使用接口作为服务方法参数 - 但不确定返回类型.
我通常不建议这样做 - 但根据您的情况和您的需求,这可能是您的替代选择.看看这个!
| 归档时间: |
|
| 查看次数: |
8772 次 |
| 最近记录: |