IBaseMessage 接口

当接收适配器通过其协议接受传入数据包时,它使用 IBaseMessage 接口创建要传递到消息引擎的消息。 所有消息都是使用这个接口传递的。

消息具有一个或多个由 IBaseMessagePart 接口表示的消息部分。 每个消息部分都有一个通过 IStream 接口指针对其数据的引用。 消息的上下文由其 IBaseMessageContext 接口表示。 下图阐释了 BizTalk 消息对象模型。

显示 BizTalk 消息对象模型的图像。

消息上下文是一个字典,以属性名称和属性命名空间的组合为键。 这可以防止不同源(例如,BizTalk Server系统属性和自定义适配器属性)之间类似命名的属性之间的冲突。 这些属性的值属于 .NET 类型 对象,但实际上这些属性是 VARIANT。

每个部分均有一个部分上下文,同样也是字典,但没有命名空间这个概念。 部分上下文的值为元数据,指向该部分数据。 其中一个示例是 Charset 属性,该属性指定用于对消息进行编码的字符集。

属性可以写入消息上下文,也可以从消息上下文中读取。 还可以升级属性,以用于消息路由。 升级意味着将其作为元数据的一部分随消息流动。 属性经升级后,其值可用于对发送端口和业务流程创建筛选器表达式。 业务流程中的下游组件和用户代码可读取升级属性,还可以对属性赋新值。

升级属性与现有订阅匹配完毕并用于路由消息后,该属性将被降级,以防止发生循环订阅匹配。 降级属性仍作为元数据留在消息上下文中,但会失去升级状态。

实现提示: 消息上下文属性在运行时加载到内存中。 不应将非常大的数据片段写入消息上下文,因为这可能会中断BizTalk Server大型消息支持。 对象可以序列化为消息上下文,前提是它们实现 IPersistStream 接口。 同样,升级属性的长度也限制在 255 个字符之内。

应始终应当使用消息工厂来创建新消息。 下面的代码段演示了如何用适配器接收的数据流来创建新的 BizTalk 消息。

using Microsoft.BizTalk.Message.Interop;  
  
IBaseMessage CreateMessage( Stream s, IBaseMessageFactory msgFactory )  
{  
IBaseMessage msg = null;  
IBaseMessagePart part = msgFactory.CreateMessagePart();  
part.Data = s;  
msg = msgFactory.CreateMessage();  
msg.AddPart("body", part, true);  
return msg;  
}