我想使用WCF来设置跨平台WebService。一个问题 - 实际上更多是性能问题 - 是我想要返回一个Type(让我们说事件),我已经在XML中使用了这个事件。所以我想避免反序列化为Event,然后WCF将它序列化为XML。知道如何管理吗?我想要实现的是像“WCF,这个方法返回一个Event-object但是我已经把它变成了XML,所以接受它并且不要强迫我先反序列化它,这样你就可以再次序列化它。” p>
丹尼尔
答案 0 :(得分:1)
我认为您应该将Message
类用于服务请求和响应,而不是DataContract定义:这应该可以让您更好地控制SOAP消息结构。如果你沿着这条路走下去,你需要创建一个自定义代理(see here开始)。
答案 1 :(得分:1)
执行消息(反)序列化的WCF组件是MessageFormatter
。
因此,您可以提供自定义IDispatchMessageFormatter
。在SeralizeReply()
方法(返回Message
)中,您可以使用带有Message.CreateMessage()
的{{1}}重载,并提供您从XML创建的XmlReader。就是这样。但是,有一些工作要做。你需要决定它是否值得。
答案 2 :(得分:0)
我不知道有什么方法可以做到这一点。除非你的Event
很大,否则额外的步骤可能不会伤害你,至少它是本地的 - 如果它 大,你的主要问题是带宽,这两种方式都是相同的。
您可以在消息中将数据公开为XmlElement
,这将避免此步骤 - 但是调用者需要知道将其识别为Event
(正如他们将在mex中看到的那样) / wsdl是一个chunk-o'-xml)。
最终,这样做的部分原因是WCF是基于对象的模型,并且序列化器实际上可以通过许多技巧进行交换 - 因此就常规WCF模型而言,事实上,你有xml是无关紧要的:那可能实际上并不是像那样的东西。它需要该对象,因此它可以要求实际的序列化程序完成这项工作。