在代码中使用biztalk类库建立Message和Part

原创 2007年09月28日 14:32:00

(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方法增加多个消息部分,但是其中只能有一个为正文部分,也可以一个正文部分都没有。

 

delphi调用cxf生成的webservice出错 message part name was not recognized.(does it exist in service wsdl?)

delphi调用cxf生成的webservice出错 message part name was not recognized.(does it exist in service wsdl?) 解决...
  • nbu_james
  • nbu_james
  • 2014年08月09日 17:48
  • 7552

BizTalk 2010 自定义EDI报文

EDI报文是一种数据标准,在实际的B2B项目中,EDI所占市场份额接近当前市场的90%,并且还在逐年增加,随着公司越发依赖EDI报文进行传输,构建可靠的、稳定的、易扩展的、直观的EDI 解决方案将是至...
  • xuyue1987
  • xuyue1987
  • 2011年10月22日 00:50
  • 4205

Biztalk 开发之 配置HTTP接收适配器

    使用文件接收适配器时,我们需要指定一个文件夹用来接收数据文件。同样,使用HTTP适配器时,也需要提供一个HTTP地址供传输数据。虽然有许多开发者都会使用ASP.NET或其它流行的WEB开发语言...
  • fengfangfang
  • fengfangfang
  • 2006年08月10日 12:55
  • 2770

Biztalk 知识整理

 原文转自:http://bbs.cnw.com.cn/viewthread.php?action=printable&tid=167493  这里感谢 原作者 BizTalk开发系列(一) "Hel...
  • bobo_keke
  • bobo_keke
  • 2009年10月29日 01:08
  • 9621

BizTalk RFID解决方案

 这附图清楚了说明了微软的RFID解决方案,其中,可以看出RFID服务,也就是微软的BizTalk Server 2006R2中发布的BizTalk RFID服务,他虽然放在 BizTalk里面,但其...
  • chengliuyy
  • chengliuyy
  • 2008年02月19日 11:09
  • 1036

BIZTALK2013的学习一

BIZTALK2013我开始了你呢
  • hecgaoyuan
  • hecgaoyuan
  • 2013年12月27日 21:10
  • 1308

关于Eclipse出现java.lang.RuntimeException: Widget disposed too early! 的解决办法

  !ENTRY org.eclipse.ui.workbench 4 0 2009-08-31 11:13:37.312!MESSAGE Widget disposed too early!!STA...
  • chajn
  • chajn
  • 2009年08月31日 14:29
  • 7322

WebService开发联通VAC接口

接口: //------------------------------------------------------------------------------ // //     此...
  • lvyongyi_2010
  • lvyongyi_2010
  • 2011年12月15日 14:07
  • 1634

在哪找biztalk的例子

很多学习biztalk的朋友都在不断的寻找biztalk的例子来学习,我也一样。这里把我找到的biztalk的例子告诉大家,希望对初学的朋友带来点方便。应该说这些例子的量已经不少,涉及的技术面也够广了...
  • cyp403
  • cyp403
  • 2007年05月11日 11:55
  • 2215

vac提供的XML文件

让我们来查看一下 WSDL 文档中的每一部分,从 段开始。 元素包括一个或者多个服务的定义。大多数情况下,一个 WSDL 文件定 义一个单独的服务。 标记后通常紧跟着以下属性的声明: name:...
  • guolong201
  • guolong201
  • 2009年12月09日 10:27
  • 358
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在代码中使用biztalk类库建立Message和Part
举报原因:
原因补充:

(最多只允许输入30个字)