【发布时间】:2013-08-15 01:09:41
【问题描述】:
我正在设置一个新的 .NET 4.0 WCF 服务,其方法(操作)将强类型 XSD 生成的数据类型作为参数。这使客户端的事情变得干净整洁 - 客户端可以使用强类型,而不必考虑 XML。
但是,在 WCF 服务的实现中,我更愿意将参数数据作为 XML 文档 (LINQ XDocument) 来处理,而不是反序列化的对象类型。 WCF 将反序列化为显式类型很好,但是对于我的通用算法,它更方便和更灵活地处理 xml 文档,主要是因为传入的数据是多态的。
我知道我可以只获取参数对象并将它们序列化回 XML,但这似乎很浪费。
我知道我可以用 XElement 替换强类型参数以获得我想要的实现方便,但这将失去客户端强类型(编译器检查、智能感知、自我文档)的好处。
有什么方法可以告诉 WCF 在我的服务实现中我不需要反序列化参数对象,而是希望它们作为 XML 来代替?
或者,有没有一种方法可以访问参数的原始 XML,就像在 WCF 将它们反序列化为对象之前一样?如果我不能阻止 WCF 花时间反序列化对象,至少这可以避免将它们重新序列化回 XML 的成本。
【问题讨论】:
-
我仍然会认为这真的值得麻烦,为什么不加快序列化和去序列化。
-
@SurjitSamra 我不明白你的评论。您是说 WCF 不值得麻烦,还是我对访问原始 XML 的兴趣不值得麻烦?除了避免不必要的往返之外,我对加快序列化或反序列化无能为力。
-
对不起,我的评论并不清楚我的意思是访问原始 XML 值得麻烦吗? WCF 非常值得每一次麻烦 :),我最近在 WCF 中迁移了超过 10 年的 .NET 远程分布式系统,有大量的自定义序列化/反序列化来加速一切,如果你使用某种注入,例如一个 marc_s 在他的然后你会发现一切都需要多长时间,就我而言,我很高兴反序列化只花了
-
当我只对 XML 的某些部分感兴趣并且可以发送多个 XML 对象/XSD 数据类型时,使用 Linq 处理原始 XML 是值得的。显式数据类型的行为不具有多态性,但使用 Linq+XML 我可以实现数据的多态性 - 使用一种算法来处理多种数据类型。
-
多态是这里的关键字,现在我的想法和你一样,如果你愿意,我想建议你的合同接收字符串作为参数,你可以在其中传递 RAW XML 然后在服务内部您可以使用 Linq+XML 实现多态性,并且仍然返回您输入的数据。
标签: wcf linq-to-xml