zoukankan      html  css  js  c++  java
  • 在代码中使用biztalk类库建立Message和Part

    (2007-9-25日更新)

    Biztalk消息是由一个消息上下文和零或多个部分组成,部分中又能且只能有一个部分别标识为正文部分。

    本文介绍使用biztalk本身的类库如何在管道组件中通过代码建立消息和消息的部分。

    一、  建立消息的接口

    有两个接口用来建立和管理消息:

    l         IBaseMessageFactory Interface

    Namespace: Microsoft.BizTalk.Message.Interop

    Assembly: Microsoft.BizTalk.Pipeline (in microsoft.biztalk.pipeline.dll)

    l         IBTMessageAgentFactory Interface(继承自IBaseMessageFactory

    Namespace: Microsoft.BizTalk.Agent.Interop

    Assembly: Microsoft.Biztalk.Interop.Agent (in Microsoft.Biztalk.Interop.Agent.dll)

    二、  建立消息过程

    1、 新建消息

    使用IbaseMessageFactoryIBTMessageAgentFactory)接口的CreateMessage方法新建一个消息:

    Microsoft.BizTalk.Message.Interop.IBaseMessage IbaseMessageFactory. CreateMessage()

    l         IbaseMessage Interface

    Namespace: Microsoft.BizTalk.Message.Interop

    Assembly: Microsoft.BizTalk.Pipeline (in microsoft.biztalk.pipeline.dll)

    2、 升级属性、写入属性

    消息建立后,可以给这个消息写入或者升级属性。

    2.1.        写入属性

    使用消息的Write方法写入Property fieldsDistinguished fields的属性,Property fields属性的名称空间在属性架构中定义,Distinguished fields的属性名称空间使用公共的名称空间:http://schemas.microsoft.com/BizTalk/2003/btsDistinguishedFields

    IBaseMessage.Write(string strName, string strNameSpace, object obj)

    strName -- 属性名

    strNameSpace -- 属性名称空间

    obj -- 属性值

    2.2.        升级属性

    使用消息的Promote方法升级Property fields属性需要升级的属性(Distinguished fields的属性不能Promote

    IBaseMessage.Promote(string strName, string strNameSpace, object obj)

    strName -- 属性名

    strNameSpace -- 属性名称空间

    obj -- 属性值

    3、 给消息添加消息的部分

    使用IbaseMessageFactoryIBTMessageAgentFactory)接口的CreateMessagePart方法新建一个消息部分:

    Microsoft.BizTalk.Message.Interop.IbaseMessagePart IbaseMessageFactory. CreateMessagePart ()

    l         IbaseMessagePart Interface

    Namespace: Microsoft.BizTalk.Message.Interop

    Assembly: Microsoft.BizTalk.Pipeline (in microsoft.biztalk.pipeline.dll)

     

    建立了消息部分后需要把消息部分的数据加入到消息,消息部分的数据可以是xml格式的消息,可以是任意类型的对象。但是这些类型的数据都必须转换为Stream类型的数据加入到消息部分。消息部分的数据通过消息部分的Data属性赋给消息部分:

    Stream Data { get; set; }

    Data属性是Stream类型的,所以消息部分的数据不管是xml类型的,还是其他类型的对象都要序列化为一个流才能加入到消息部分。Dotnet框架提供了三种序列化的类:

    BinaryFormatter

    SoapFormatter

    XmlSerializer

    因为BinaryFormatterSoapFormatter类序列化的类必须是标识了[Serializable]属性的类,而XmlDocument类是没有[Serializable]属性标识的,所以一般在biztalk中使用XmlSerializer序列化xml类型的消息,用BinaryFormatter序列化其他类型的消息。

    BinaryFormatter.Serialize(Stream serializationStream, object graph)

    XmlSerializer. Serialize (Stream serializationStream, Object graph)

    graph为需要序列化的对象

    serializationStream为序列化后Stream保存的对象,一般为MemoryStream

     

    同样可以使用序列化类的反序列化方法把序列化的Stream反序列化为原来的对象:

    (原来的类型)BinaryFormatter.Deserialize(Stream serializationStream)

    (XmlDocument)XmlSerializer. Deserialize(Stream serializationStream)

     

    生成消息部分的Stream后,通过给消息部分的Data属性赋值加入到消息部分。

    之后再通过消息的AddPart方法把完整的消息部分对象加入到消息对象中:

    IbaseMessage.AddPart(string partName, IBaseMessagePart part, bool bBody);

    partName为部分的名称

    part为消息部分对象

    bBody为表示这个部分是否是消息的正文部分

     

    消息中可以使用AddPart方法增加多个消息部分,但是其中只能有一个为正文部分,也可以一个正文部分都没有。

  • 相关阅读:
    bzoj1663: [Usaco2006 Open]赶集
    bzoj1662: [Usaco2006 Nov]Round Numbers 圆环数
    [bzoj3771]Triple
    [bzoj1477]青蛙的约会
    [bzoj2299][HAOI2011]向量
    [2017.4.7校内训练赛by hzwer]
    [bzoj2456]mode
    [bzoj2120]数颜色
    [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症
    [4.6校内训练赛]
  • 原文地址:https://www.cnblogs.com/chnking/p/827342.html
Copyright © 2011-2022 走看看