在WCF服务实现中获取params的原始XML

时间:2011-12-10 18:45:51

标签: wcf linq-to-xml

我正在使用一种方法(操作)设置新的.NET 4.0 WCF服务,该方法将强类型XSD生成的数据类型作为参数。这使得客户端的内容干净整洁 - 客户端可以使用强类型,而不必考虑XML。

但是,在WCF服务的实现中,我更愿意将参数数据作为XML文档(LINQ XDocument)处理,而不是反序列化的对象类型。 WCF将反序列化为显式类型很好,但对于我的通用算法,处理xml文档更方便,更灵活,主要是因为传入的数据是多态的。

我知道我可以直接获取参数对象并将它们序列化为XML,但这看起来很浪费。

据我所知,我可以用XElement替换强类型的params以获得我想要的实现方便性,但这将失去客户端强类型(编译器检查,智能感知,自我文档)的好处。

有没有办法告诉WCF在我的服务实现中我不需要反序列化的参数对象,我想要它们作为XML?

或者,有没有办法访问params的原始XML,因为它们在WCF反序列化为对象之前?如果我不能阻止WCF花时间反序列化对象,至少可以避免将它们重新序列化回XML的成本。

1 个答案:

答案 0 :(得分:3)

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

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

通过检查消息,您可以访问原始SOAP消息格式的参数。

我想也许参数检查员可能是更好的选择,但是看起来好像这些检查员只有在将这些参数反序列化为对象后才能获得任何服务调用的参数,这样就不会发出声音像一个可行的方法......