首页 百科知识 6.4.3消息服务核心功能

6.4.3消息服务核心功能

时间:2022-10-16 百科知识 版权反馈
【摘要】:消息是由信封元素、消息头元素和消息体元素组成的,消息在一定的安全机制下,通过特定的协议绑定后,实现消息服务功能。XML文档应该显示包含版本信息来帮助应用程序使用特定的分析器进行处理。从而使消息路由元素中保留了消息经过的所有转发节点。消息标识元素是必备的,它是消息的唯一标识,用于对消息的跟踪、日志等。回执处理子元素标记为﹤Receipt﹥,由消息接收者发给消息发送者,说明消息已经被成功接收。

6.4.3 消息服务核心功能

消息是由信封元素、消息头元素和消息体元素组成的,消息在一定的安全机制下,通过特定的协议绑定后,实现消息服务功能。

1)信封元素

SOAP信封元素是所有XML消息的根,并且包含所有其他的元素,它出现在每一个XML消息中,标记名为﹤Envelope﹥。

﹤Envelope﹥有下列属性:

(1) xmlns——指定此消息所用到的名称空间,其值为“http:// schemas.xm lsoap.org/soap/envelope/”。

(2) version——说明XML协议的版本。XML文档应该显示包含版本信息来帮助应用程序使用特定的分析器进行处理。

Envelope包含两个子元素:

(1)标头元素——标记为﹤Header﹥,是SOAP信封中第一个子元素,定义了消息的一些属性。标头元素必须有一个和在SOAP信封命名空间申明匹配的合法名称空间: http://schemas.xmlsoap.org/soap/envelope/。

(2)体元素——标记为﹤Body﹥,是SOAP信封中第二个子元素,定义了消息的具体内容。同样的,体元素必须也有一个和在SOAP信封名称空间申明匹配的合法名称空间: http://schemas.xmlsoap.org/soap/envelope/。

2)消息头元素

消息标头定义XML消息的属性和特征,它是信封元素中的第一个子元素,必须包含在每一个XML消息中,标记为﹤Header﹥。

消息标头包含下列10个子元素。

(1)消息来自和消息发往

消息来自的标记为﹤From﹥,消息发往的标记为﹤To﹥,To和From一起可以包含逻辑定义方式,例如一个邓白氏DUNS号码或一个物理位置例如E-mail地址

这两个元素都包含下列元素:

●身份标识(PartyId)——可以被包含一次或多次。

●认证角色(Role)——可以被包含零次或一次。

如果From和To中有包含多个PartyId元素,所有的列表的成员都必须记录同样的组织身份。除非一个type的值参考多个定义机制,否则任何给出的type属性的值在PartyId元素的列表中都是唯一的。

From和To元素包含0个或一个Role子元素,这个子元素应该紧跟在最后的PartyId元素后面。

(2)身份标识

身份标识元素有单一的属性type和内容的值都是字符串类型。type属性指出了PartyId元素内容的字符串属于的名称和范围。type的值必须互相达成一致或可以被每个组织所理解。推荐type的值是一个统一资源定位符(URI),这些值应该从EDI RA(ISO 6523)、EDIFACT ISO 9735、GS1注册中去选取。如果PartyId type属性不存在,PartyId元素的内容必须是一个URI[RFC 2396],否则接收的MSH应该报错。建议PartyId的内容是一个URI。

(3)认证角色

Role定义了发送和接收的认证角色。它的值是一个非空字符串。

Role最好被定义为一个URI,例如: http://rosettanet.org/roles/buyer。例如,﹤From﹥、﹤To﹥的使用:

﹤From﹥﹤PartyId Type=″{string}″﹥123456789﹤/PartyId﹥

﹤PartyId Type=″{string}″﹥{string}﹤/ PartyId﹥

﹤Role﹥{string}﹤/Role﹥

﹤/From﹥

﹤To﹥

﹤PartyId﹥{string}﹤/ PartyId﹥

﹤Role﹥{string}﹤/Role﹥

﹤/To﹥

(4)消息发送者

消息发送者是记录建立通信连接和发送此消息的具体机构。在开始消息发送的时候﹤消息发送者﹥和﹤消息来自﹥是相同的,但是当XML文档经过中间节点时,﹤消息发送者﹥改变为指示当前的发送方。

(5)消息路由

消息路由是记录消息的转发途径,当接收者收到一个XML消息后,若还需要将消息发送出去,则必须将消息中的﹤消息发送者﹥元素的内容加入到本元素的尾部,然后在<消息发送者>元素中记录自己的标识。从而使消息路由元素中保留了消息经过的所有转发节点。

(6)业务合作协议信息

业务合作协议信息是记录控制消息的合作伙伴协议,包括四个子元素:﹤业务合作协议标识﹥;﹤会话标识﹥;﹤服务﹥;﹤行为﹥。﹤业务合作协议标识﹥定义了业务合作协议的URI;﹤会话标识﹥定义了一系列组成对话双方之间的消息;﹤服务﹥元素是必备元素,它定义了一种消息服务。

(7)消息标识

消息标识元素是必备的,它是消息的唯一标识,用于对消息的跟踪、日志等。消息一经产生,就永久持有此标识,若进行消息重试等操作,则消息标识也不改变。为了实现其唯一性,UID的建议是:日期时间.进程id.随机数@主机名。

(8)回执要求(可选)

回执要求定义了接收到该信息后是否需要发一个回执,如果是的话,则在成功接收到该消息后,将一个回执信息返回给信息发送者。回执的内容将在消息体中描述。

(9)消息描述(可选)

消息描述是对消息的一个文字描述,使接收者收到该消息后不需要打开消息体的内容就可以大致了解到消息的描述信息。

(10)消息属性(可选)

消息属性定义了消息本身拥有的一些特殊属性。每个消息属性元素中包含一个“属性名”属性,定义属性的名称。元素中的内容定义具体的属性值。在一个消息头元素中允许定义任意多个消息属性。

在消息来自、消息发往、消息发送者等元素中,都用到了﹤身份标识﹥子元素,描述了接收者、发送者等的标识信息。通过﹤身份标识﹥可以确定接收者、发送者的地址和认证方式。﹤身份标识﹥元素包含一个“类型”属性,用于定义使用何种方式来标识身份,包含一个﹤标识值﹥子元素,定义具体的标识信息。

3)消息体元素

消息体记录消息包含的具体内容,标记为﹤Message﹥。消息体内容可以分为文档、故障处理和回执处理三种类型故障。文档子元素标记为﹤Document﹥,定义XML消息中传输的具体内容。在一个消息体中可以同时包含多个文档元素,这样可以实现在一个XML消息中同时传递多个文档数据。故障处理子元素标记为﹤Failure﹥,由消息接收者发给消息发送者,定义消息接收不成功或者处理错误等信息。回执处理子元素标记为﹤Receipt﹥,由消息接收者发给消息发送者,说明消息已经被成功接收。如果接收者收到一个需要进行回执的消息,即消息头中的﹤回执要求﹥为真,则立刻产生一个消息回执发给消息的发送者。文档、故障处理和回执处理都是可选元素,但是在一个消息体中必须至少具有一项,即消息体不能同时为空。下面对消息体中三种类型的元素分别进行描述。

(1)文档

文档是消息体中最重要的一种内容,发送者和接收者之间交换的数据都由它来定义。﹤Document﹥元素包含一个可选属性:名称空间(标识为xmlns),指定为文档中元素和属性所使用的名称空间。﹤Document﹥元素包含下列子元素:

●文档名称(可选)

标记为﹤DocLabel﹥,用来给所包含的文件定义一个名字。

●文档转发(可选)

标记为﹤Forward﹥,通过在该元素中定义转发地址,可以完成对一个XML消息中特定文档的再次转发。当﹤文档转发﹥不为空时,在收到此文档后必须生成一个新的XML消息,或者利用一个已有的XML消息,把此文档嵌入到消息体中,并将转发地址作为消息的接收地址。它与消息头中的发送方式进行配合,可以进行丰富、灵活的文档发送。

●文档属性(可选)

标记为﹤Property﹥,定义文档本身拥有的一些特殊属性。每个文档属性元素中包含一个“属性名”属性(标识为Name),定义属性的名称。元素中的内容定义具体的属性值。在一个文档元素中允许定义任意多个文档属性。

●XML文档

标记为﹤Content﹥,在该元素中可以嵌入XML文档,整个XML文档作为它的子元素。

●数据文档

标记为﹤Data﹥,该元素负责嵌入非XML格式的数据文档,它将数据对象进行合适的编码,形成文本数据,作为该元素的内容。

●清单文档

标记为﹤Manifest﹥,它是复合元素,包含一个或多个﹤参考﹥元素(标签为﹤Reference﹥)。每一个﹤参考﹥元素将数据与对应的消息联系起来。

﹤Manifest﹥元素包括下列的属性和元素;

——标识(id)属性;

——版本(version)属性;

——一个或多个﹤参考﹥(﹤Reference﹥)元素。

﹤参考﹥(﹤Reference﹥)元素是一个复合元素,它包括下列子元素:

0个或多个﹤模式﹥(﹤Schema﹥)元素。它定义了实例文档模板的信息,这些实例模式是在父﹤参考﹥(﹤Reference﹥)元素中识别的。

0个或多个﹤描述﹥(﹤Description﹥)元素。它是对父﹤参考﹥(﹤Reference﹥)元素引用的负载对象文本的描述。

(2)故障处理

在消息体中除了可以包含各种文档之外,还可以定义故障消息。故障消息定义了消息这一层次的错误处理信息,当接收者获取到一个消息并进行处理时,若遇见了困难而无法对消息进行正常处理,则可以向发送者发出一个故障处理信息。故障处理的标记为﹤Failure﹥,它包含下列两个属性:

——时戳

标识为Timestamp,定义了故障发生的时间,它的定义遵循消息头中﹤时戳﹥元素的定义方式。

——故障代码

标识为ReasonCode,定义了出现故障的错误信息代码。

在﹤ReasonCode﹥元素的内容中,定义具体的故障描述信息,整个元素的结构为:﹤Failure时戳=″{datetime}″故障代码=″{string}″﹥

……

﹤/Failure﹥

(3)回执处理

消息体内容的第三类信息为回执处理,如果接收者收到一个需要进行回执的消息,即消息标头中的RequiedReceipt属性为真,则应立刻产生一个消息回执,并发给始发消息的发送者。回执处理的标记为﹤Receipt﹥,它包含下列两个属性:

——时戳

标识为Timestamp,定义了消息接收到的时间,它的定义遵循消息头中﹤时戳﹥元素的定义方式。

——消息标识

标识为MessageID,定义了接收到的消息的唯一标识,其值应是接收到消息的消息头的“消息标志”属性。

在﹤回执处理﹥元素的内容中,可以附加一些接收到消息的文字描述信息,整个元素的结构为:

﹤Receipt时戳=″{datetime}″消息标识=″{string}″﹥

……

﹤/Receipt﹥

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈