回答
尝试通过IList<T>
对于基于WCF的服务并不合适。
WCF根据数据契约进行对话,定义服务或客户端期望发送和接收的数据的形状。这些合约必须足够具体,以便序列化程序知道如何将它们转换为XML,JSON和其他表示形式。
当你把一个像IList<T>
这样的接口放入你的服务合约中时,你没有给序列化程序足够的有关指定形状数据的信息。你关心的只是发送IList<T>
部分的实现吗?你是否对实现接口的东西中包含的其他有状态数据感兴趣?序列化程序无法知道。
最简单的解决方案是在WCF中使用基本的数据传输对象。这些都是简单的类,它们只具有表示要通过媒体传输信息的工作。这些类仅包含具体类型,并且很容易被序列化程序理解。当你想发送消息时,你可以创建这些对象的实例并用数据填充它们。
对于您的示例,创建List<T>
而不是IList<T>
,并在将值传递到服务之前将其复制到列表中。一个简单的方法是使用Enumberable.ToList<T>()
扩展方法。
串行器需要知道具体的类型,以便与注释[ServiceKnownType],所以它知道可以使用什么类型的IList的
更新合同:对象不帮助尽可能串行仍然没有按”不知道该怎么做 - 你需要使用[ServiceKnownType]来告诉它 - 你可以在这里提供一个方法,如果你不想在编译时显式地返回类型列表
你需要使用泛型并标记它是什么类型的列表,以便服务知道该期待什么。一种方法可以是这样的:
public IList<Something> GetSomething()
这么说,我这样做时,我往往不是仅仅因为有读书迟代码究竟是什么回事返回(做一个非WCF时少猜测返回数组客户端在另一端为它创建一个IList类还是将它转换成其他东西?)。一切都知道数组是什么。
我可以使用此类似:公共IList的
当然,如果你希望人们在另一端得到的是Object。但是由于Object没有数据,这可能不是你想要的。 :)如果你更具体地说明一种方法将要发回的东西,这个东西效果最好。 – Tridus
除了使用列表类型
的概念 - 为什么不只是使用数组?
数组似乎是最明显的选择,因为它是与IEnumerable的兼容,客户端可以使用自己的扩展方法
- 1. 如何通过服务发送通知
- 2. 如何将IList发送给WCF
- 3. 如何通过WCF Web服务序列化和发送MailMessage?
- 4. 如何通过WCF休息服务向Kindle Fire发送推送通知
- 5. 如何通过Web服务发送ArrayList?
- 6. WCF RIA发送服务器通知
- 7. 如何通过ksoap2-android发送复杂类型到wcf服务? - 如何配置wcf服务?
- 8. 如何发送XmlDocument到WCF服务?
- 9. 如何发送对象到wcf服务?
- 10. 通过HTTP发布到WCF服务
- 11. 通过链接发现WCF服务
- 12. 通过WCF服务调用发送Windows凭据
- 13. 通过URL发送WCF服务请求和参数
- 14. HTTP/1.1 202(接受)通过HTTPS发送到WCF服务
- 15. WCF。通过服务和客户端发送数据
- 16. 通过3G向WCF服务发送POST请求
- 17. 通过WCF休息服务发送大文件(> 10 MB)
- 18. 通过WCF发送XML?
- 19. 通过WCF发送数据
- 20. 通过WCF Web服务
- 21. WCF服务通过TimeZoneInfo
- 22. WCF如何将用户名令牌发送到WCF服务
- 23. 发布到WCF服务发送空值
- 24. 服务器通过AFNetworking发送事件
- 25. 通过HttpWebRequest发送对象(REST服务)
- 26. 通过web服务发送文件
- 27. 通过web服务发送图像
- 28. Wcf向xamarin客户端发送服务推送通知
- 29. 如何通过URI引用WCF Web服务/如何通过URI将WCF服务POST?
- 30. 如何通过MYSQL通过WCF服务插入操作?
谢谢你英雄的好回答。 –