【问题标题】:Get the raw XML of params in a WCF service implementation在 WCF 服务实现中获取参数的原始 XML
【发布时间】: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


【解决方案1】:

执行此操作的一种方法是创建一个message inspector,它会检查服务器上的传入消息并对其进行操作(例如,将其存储或其他)。

Pablo Pialorsi 有一个great blog post on how to write a message inspector,一步一步

检查消息将使您能够访问原始 SOAP 消息格式的参数。

我认为参数检查器可能是更好的选择,但看起来这些检查器似乎只有在这些参数已经反序列化为对象后才开始处理任何服务调用的参数,所以这听起来并不像一个可行的方法....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2016-10-23
    相关资源
    最近更新 更多