3.3.1.1 Web服务行为
Web服务行为主要指服务内部状态的变迁和消息(数据)的流转。我们以图3.3所示的订票服务Agency为例来说明。
图3.3 订票服务Agency
从图3.3可以看出,该服务包含3个端口类型(Port Type):PT1、PT2和PT3。其中,PT1包含AC1这个操作,PT2包含AB1、AB2和AB3三个操作,PT3包含AC2和AC3这两个操作。
订票服务的内部流程逻辑描述如下:服务在初始状态A获得客户代理Client的一个订票请求消息Req(Request)之后进入状态B。在状态B订票服务向机票数据服务Data发送请求信息Get(Get TickInfo),请求当前可获得的机票信息之后进入状态C。如果订票服务在状态C接收到机票数据服务发送的有票信息Tic,则进入状态D;如果订票服务在状态C接收到机票数据服务发送的无票信息NTc,也进入状态D。如果存在客户请求的机票数据(即Have=Yes),则订票服务在状态D向客户代理发送接受请求的消息Acc(Accept),由状态D进入结束状态E,服务实例结束;如果不存在客户请求的机票数据(即Have=No),则订票服务在状态D向客户代理发送拒绝请求的消息Ref(Refusal),由状态D进入结束状态E,服务实例结束。通过以上一系列服务内部状态的变迁和消息(数据)的流转,一次服务就完成了。
3.3.1.2 Web服务视图
Web服务视图包含了外部接口视图和内部行为视图。在外部接口视图中,服务提供操作以供外界调用,从而完成消息的接收和发送;在内部行为视图中,在消息收发动作的触发下,服务根据一定的业务过程从起始状态经过状态的变迁最终到达结束状态。
定义3.7 服务接口视图可以形式化地定义为五元组IV=(T,P,M,fp,fm),其中:
(1)T为服务的端口类型集合;
(2)P为服务包含的操作集合,对于P中的一个元素p∈P,引入标记type(p)用于标识该操作所属的类型;
(3)M为服务的消息集合;
(4)fp为端口类型集合到操作集合的超集的映射,用于标识每一个端口类型所包含的操作;
(5)fm为操作集合到消息集合的超集的映射,用于标识每一个操作所接收或发送的消息。
在WSDL中定义了4种端口类型,如表3.1所示。
表3.1 WSDL端口操作类型
在上述4种操作类型中,Request-Response类型的操作可以先后由一个One-Way类型的操作和一个Notification类型的操作来表示,而Solicit-Response类型的操作可以先后由一个Notification类型的操作和一个One-Way类型的操作来表示。因此,在服务接口视图的定义中type(p)={Oneway,Notification}。
根据服务接口视图的定义,图3.3所示的订票服务的接口视图可以定义为,其中:
定义3.8 内部行为视图可以形式化的定义为一个四元组BV={S,s0,sf,R},其中:(www.xing528.com)
(1)S为服务的状态集合;
(2)s0为服务的起始状态;
(3)sf为服务的结束状态;
(4)R为服务状态的迁移集合,而每一个状态迁移r又可以形式化为一个五元组;其中,sb为迁移的起始状态,se为迁移的目标状态,C为迁移能够发生的条件集合,a为迁移的触发动作(a∈{receive,send},receive表示消息接收动作,send表示消息发送动作),M为触发动作所关联的消息集合(M中每一个元素m均具有一定的方向,记为d(m);若m与receive类型的触发动作相关联,则该消息的方向为+;若m与send类型的触发动作相关联,则该消息的方向为-;即d(m)∈{+,-})。
根据服务行为视图的定义,图3.3所示的订票服务的行为视图可以定义为BVAgency=(S,s0,sf,R),其中:
定义3.9 根据以上两个定义,一个服务s所对应的服务视图SV可以形式化地定义为一个四元组SV=(s,IV,BV,fIB),其中:
(1)s为服务视图所对应的服务;
(2)IV为服务接口视图;
(3)BV为服务行为视图;
(4)fIB为行为视图与接口视图的关联映射,用于说明行为视图中迁移的触发动作与接口视图中操作的对应关系。
根据服务视图定义,图3.3所示的订票服务的服务视图可以定义为SVAgency=(s,IVAgency,BVAgency,fIB),其中:
(6)fIB(r6)=AC 2。
在给定服务s和其服务视图SV后,在服务s的行为视图BV中,从起始状态s0到BV中其他任意一个状态sn的一条迁移路径st=<ri,…,rj,…,rk>上的操作组成的有序队列PQ=<fIB(ri),…,fIB(rj),…,fIB(rk)>称为该服务视图的一条操作序列,其长度记为lPQ=|PQ|;若sn为结束状态,则该操作序列称为完全操作序列。
在图3.3所示的服务视图中,包含了两条完全操作序列:
(1)PQ1=<AC 1,AB 1,AB 2,AC 3>;
(2)PQ2=<AC 1,AB 1,AB 3,AC 2>。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。