我们从远程处理迁移到WCF 这是一个非常大的应用程序,它大量使用DataSet。我们使用DataSet的表的ExtendedProperties来存储包含客户端所需的特殊信息的对象图。
在我们的Remoting实现中,我们确实在通道堆栈中添加了一个客户端和一个服务器通道,以检查消息是否包含数据集并使用xml序列化程序来通过线路发送ExtendedProperties(您可能知道数据集序列化程序)执行在ExtendedProperties中找到的元素的ToString()。
我们这样做是因为它对业务规则和UI开发人员是透明的。
我们应该在WCF中覆盖或实现什么才能在通过wcf通道将其序列化为xml / soap之前管理DataSet?有可能吗?
注意:我已经知道我们必须避免在wcf中使用数据集,但是我们使用数据集有200多个表单,并且现在不能更改它们。
非常感谢!
答案 0 :(得分:2)
我想知道你是否不能通过在每一端添加一个行为属性来交换序列化器...给定XmlReader
/ XmlWriter
,方法是:
dataset.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);
和
dataset.ReadXml(xmlReader, XmlReadMode.ReadSchema);
似乎有效(即扩展属性得到尊重),因此您应该能够编写一个检测DataSet
并转换到自定义序列化程序的行为 - 就像这样(attribute | {{3} } | behaviour) - 但可能更简单。如果这还不够开始,我可以稍后再看看......
答案 1 :(得分:1)
您可以考虑切换到NetDataContractSerializer。它能够序列化所有可序列化的.NET类型,甚至包括支持ISerializable的类型,并且它完全处理这些图形中的循环。
但是,只有当您要通过.NET客户端使用WCF服务时,这才有效。
答案 2 :(得分:1)
首先感谢您的回答。我终于找到了如何使用Marc的答案和Nicholas Allen's Indigo Blog的条目来更改序列化程序。
谢谢。