BizTalk管道IBaseMessage IPropertyContext

BizTalk管道IBaseMessage IPropertyContext,biztalk,Biztalk,当消息到达BizTalk管道时,IBaseMessage实例是否代表传入消息?属性,以及如何理解它?是的,这是正确的。 IBaseMessage是消息 有关如何创建自定义管道组件的详细说明,请参见: 这应该让您开始。您主要感兴趣的两个部分是IBaseMessage中的BodParty.GetOriginalDataStream()和上下文对象。比如说 Stream originalDataStream=pInMsg.BodyPart.GetOriginalDataStream(); 字符串msg

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

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

有关如何创建自定义管道组件的详细说明,请参见:


这应该让您开始。

您主要感兴趣的两个部分是
IBaseMessage
中的BodParty.GetOriginalDataStream()和
上下文
对象。比如说

Stream originalDataStream=pInMsg.BodyPart.GetOriginalDataStream();
字符串msgastring;
XDocument msgAsXDoc;
StreamReader sr=新StreamReader(原始数据流)
msgAsString=sr.ReadToEnd();
originalDataStream.Position=0;//在传递消息之前重置此设置非常重要!
msgAsXDoc=XDocument.Load(originalDataStream);//现在,您将其保存在XDoc中
originalDataStream.Position=0;
XmlReader xr=XmlReader.Create(原始数据流)
originalDataStream.Position=0;
string strProperty=(string)pInMsg.Context.Read(“propertyName”,”http://PropertyNameSpace");
字符串anotherProperty=“Testing”;
Write(“anotherPropertyName”http://PropertyNamespace“,另一个属性)
pContext.ResourceTracker.Add(xr);
pContext.ResourceTracker.Add(sr);
等等

还有几点需要注意:

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

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

      属性包含在.Context集合中

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