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 实现可以有多个部分。
当消息到达 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 实现可以有多个部分。