我需要在自定义 WCF LOB 适配器中检索二进制(非 XML)文档作为消息(供 BizTalk 使用)。消息需要表示为 System.ServiceModel.Channel.Message 的实例。
当内容是二进制时,我找不到如何创建此类的实例(“二进制”是指任何任意字节数组或流,而不仅仅是 XML 文档的二进制表示)。
这可能吗?或者将二进制内容包装在 XML 信封中是在 WCF 中执行此操作的唯一方法吗?
WCF 提供了一些方法来以各种方式发送二进制附件和流数据。我们有一个正在工作的应用程序可以做到这一点,但我没有机会深入研究代码,所以我无法提供太多帮助。以下是一些可以帮助您入门的链接(Nicholas Allen 的 Indigo 博客是获取 WCF 信息的好地方):
从根本上说,WCF 消息是XML,因为 SSCMessage 类使用 Xml InfoSet 作为基本消息表示。
所以是的,您需要以某种方式将二进制内容“包装”到 XML 信封中(请注意,它不需要是 SOAP 信封,这取决于您的绑定配置方式)。
也就是说,请注意,这并不排除流处理大型消息有效负载而不将整个消息缓冲在内存中;WCF 仍然允许您执行此操作,尽管有时它的工作原理并不是很明显。
由于您使用的是自定义渠道,因此我认为您有两种选择之一:
在任何一种情况下,如果您正在处理大型消息,您将需要确保使用处理 Streams 而不是缓冲区的 MessageEncoder 重载,因为它们使您可以选择与服务实现进行协调流.