我正在制作一个通过WCF连接到SQL DB的WP7应用程序。但在添加客户端代理并对其进行测试后,我收到了此错误。
名称空间IExtensibleDataObject
中不存在类型或命名空间名称System.Runtime.Serialization
(您是否缺少程序集引用?)
答案 0 :(得分:1)
显然(根据this blog),WP7使用的.NET Compact Framework不会在System.Runtime.Serialization
命名空间中公开IExtensibleDataObject。
另一种方法是使用Silverlight Service Model Proxy Generation Tool生成客户端代理。生成的代码应该适用于WP7。
答案 1 :(得分:0)
可能值得验证您是否需要实现IExtensibleDataObject。这是为了跨不同版本的数据合同的向前兼容性而设计的,请参阅Forward-Compatible Data Contracts。
如果您(1)没有处理需要往返数据的场景(例如,向服务发送消息并让消息以相同的数据合同发回消息)和(2)不要不需要使用新数据合同来支持客户端向仅理解数据合同的先前版本的服务发送消息,该服务然后使用发送的数据返回消息,返回到新版本的客户端。虽然这可能是一个重要的场景,但并不是每个人都需要支持的。通常向后兼容就足够了。并且IExtensibleDataObject方法确实假设新数据协定中的额外数据可以被旧服务的逻辑忽略,并且只是完整地返回给调用者。同样,这适用于某些情况而不适用于其他情况。在最简单的情况下,是什么原因导致您必须支持新版本的电话应用程序将数据往返旧版本的服务?
如果您认为不需要该功能,则可能值得考虑从您的服务中删除IExtensibleDataObject合同。
如果确实需要这种前向兼容性,那么另一种选择是在没有WCF生成的代理的情况下工作,创建通道并发送和接收System.ServiceModel.Channels.Messages并自己处理SOAP消息,包括决定什么您想要使用不属于原始合同的额外XML元素。绝对是一个高级主题,但如果你把它放在心上就可以做到。