BizTalk 管道 IBaseMessage IPropertyContext

BizTalk Pipeline IBaseMessage IPropertyContext

当消息到达 BizTalk 管道时,IBaseMessage 实例是否代表传入消息?和 属性 ,以及如何理解这个?

是的,这是正确的。 IBaseMessage 是消息。

可以在此处找到有关如何创建自定义管道组件的清晰说明:http://geekswithblogs.net/bosuch/archive/2012/01/24/creating-a-custom-biztalk-2010-pipeline-componentndashpart-i.aspx

这应该可以帮助您入门。

IBaseMessage 中您主要感兴趣的两个部分是 BodParty.GetOriginalDataStream()Context 对象。例如

Stream originalDataStream = pInMsg.BodyPart.GetOriginalDataStream();
string msgAsString;
XDocument msgAsXDoc;
StreamReader sr = new StreamReader(originalDataStream)
msgAsString = sr.ReadToEnd();

originalDataStream.Position = 0; // important to reset this before passing the message on!

msgAsXDoc = XDocument.Load(originalDataStream); // now you have it in an XDoc
originalDataStream.Position = 0;

XmlReader xr = XmlReader.Create(originalDataStream)
originalDataStream.Position = 0;

string strProperty = (string)pInMsg.Context.Read("propertyName", "http://PropertyNameSpace");

string anotherProperty = "Testing";
pInMsg.Context.Write("anotherPropertyName", "http://PropertyNamespace", anotherProperty)

pContext.ResourceTracker.Add(xr);
pContext.ResourceTracker.Add(sr);

一些其他注意事项:

  • 避免'using'构造,它们最终会处理底层流并导致错误
  • 将任何一次性对象添加到上下文的资源跟踪器,这将确保在基础流准备好处理时正确调用 Dispose() 这些对象。

好吧,是也不是。

为清楚起见,IBaseMessage 是实际消息对象 (.Net) 类型实现的接口。它之所以有效,是因为 .Net 允许将接口用作类型。

属性包含在 .Context 集合中。

此外,BizTalk IBaseMessage 实现可以有多个部分。