返回WCF中已序列化的类型

本文关键字:类型 序列化 WCF 返回 | 更新日期: 2023-09-27 17:57:53

我想使用WCF来建立一个跨平台的WebService。一个问题——实际上更像是一个性能问题——是我想返回一个类型(比方说Event),而我已经用XML处理了这个事件。因此,我希望避免反序列化为Event,然后WCF将其序列化回XML。知道怎么处理这个吗?我想要实现的是类似于"WCF,此方法返回一个Event对象,但我已经将其序列化为XML,所以请接受它,不要强迫我先反序列化它,这样您就可以再次序列化它"。

Daniel

返回WCF中已序列化的类型

执行消息(反)序列化的WCF组件是MessageFormatter

因此,您可以提供一个自定义的IDispatchMessageFormatter。在SeralizeReply()方法(返回Message)中,可以使用Message.CreateMessage()重载,该重载接受XmlReader并提供从XML创建的XmlReader。就这样。不过还有一些工作要做。你需要决定它是否值得。

我认为您应该为服务请求和响应使用Message类,而不是DataContract定义:这将使您能够更好地控制SOAP消息结构。然而,如果你走这条路,你将需要创建一个自定义代理(请参阅这里的开始)。

我不知道有什么方法可以做到这一点。除非你的Event很大,否则额外的步骤可能不会伤害你,至少它是本地的-如果很大,你的主要问题是带宽,无论哪种方式都是一样的。

您可以在消息中将数据公开为XmlElement,这将避免此步骤,但调用方需要知道如何将其识别为Event(因为他们在mex/wsdl中看到的只是一个chunk-o'-xml)。

最终,它这样做的部分原因是WCF是一个基于对象的模型,并且串行器实际上可以通过许多技巧进行交换-因此,就常规WCF模型而言,拥有xml这一事实是无关紧要的:这实际上可能不是之类的东西。它需要这个对象,这样它就可以请求实际的序列化程序来完成这项工作。