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