WCF System.ServiceModel.Channel.Message:二进制消息内容(非XML)?

时间:2009-03-18 03:11:59

标签: wcf biztalk

我需要在自定义WCF LOB适配器中检索二进制(非XML)文档作为消息(供BizTalk使用)。消息需要表示为System.ServiceModel.Channel.Message。

的实例

当内容为二进制时,我找不到如何创建此类的实例(“二进制”是指任意字节数组或Stream,而不仅仅是XML文档的二进制表示。)

这可能吗?或者将二进制内容包装在XML enveloppe中是否是在WCF中执行此操作的唯一方法?

2 个答案:

答案 0 :(得分:1)

WCF提供了一些以各种方式发送二进制附件和流数据的方法。我们有一个应用程序正在执行此操作,但我没有机会挖掘代码,因此我无法提供太多帮助。以下是一些可能帮助您入门的链接(Nicholas Allen's Indigo Blog是WCF信息的好地方):

答案 1 :(得分:1)

基本上,WCF消息 XML,因为S.S.C.Message类使用Xml InfoSet作为基本消息表示。

所以是的,在某种程度上,您需要将二进制内容“包装”到XML信封中(不需要是SOAP信封,请注意,具体取决于绑定的配置方式)。

那就是说,请注意,这并不排除流处理大消息有效负载而不缓冲内存中的整个消息; WCF仍然允许你这样做,虽然有时它的工作原理并不是很明显。

由于您正在使用自定义渠道,我认为您有两种选择之一:

  1. 让自己的频道在向上传递或
  2. 之前,在二进制内容周围添加XML包装器
  3. 创建自定义MessageEncoder,自动为您添加。
  4. 在任何一种情况下,如果您正在处理大型消息,您将需要确保使用处理Streams而不是缓冲区的MessageEncoder重载,因为它们可以让您选择使用服务实施。