本发明要求以下两个申请的优先权:美国专利申请,编号为10/262,551,其提交于2002年9月30日,标题为“Safe Interoperability Among Web Services(web服务中的安全互操作性)”,其作为参考特别结合于此;美国专利申请,编号为10/338,165,其提交于2003年1月7日,标题为“Type Checking for SafeInteroperability(安全互操作性的类型核查)”,其作为参考特别结合于此。
较佳实施例的详细描述
图2示出了适合实现本发明某些方面的计算系统环境200的示例,比如执行web服务的程序并验证web服务的规范以确认安全互操作性。计算系统环境200仅是合适计算环境的一个示例,且其不对本发明的使用范围或功能做任何限制。计算环境200也不应被解释为对举例说明并描述的组件的任一个或其组合有任何依存关系或需求。
本发明可用于多个其它通用或专用计算系统环境或配置中。众所周知的可适用于本发明的计算系统、环境和/或配置的示例包括,但不局限于,个人计算机、服务器计算机、手持式或膝上型设备、微处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子设备、网络PC、小型机、大型机、包括任何上述系统或设备的分布计算环境,等等。
本发明是用诸如可由计算机执行的程序模块这样的计算机可执行指令的通用上下文来说明的。通常,程序模块包括例程、程序、对象、组件、数据结构,等等,其执行特定的任务或实现特定的抽象数据类型。
本发明也可在分布计算环境中实现,其中任务由通过通信网络连接的远程处理装置来执行。在分布式计算环境中,程序模块可位于本地或远程计算机存储介质中,这包括存储器存储设备。
图2中示出的计算系统环境包括形式为计算机210的通用计算装置。计算机210的组件可包括,但不局限于,处理单元220、系统存储器230、以及将包括系统存储器在内的各个系统组件耦合到处理单元220的系统总线221。系统总线221可以是几种类型总线结构的任一种,这包括存储器总线或存储器控制器、外围总线,以及使用任何多种总线体系结构的局部总线。作为例子,但并非限制,这样的总线体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线,以及外围组件互连(PCI)总线,也称为Mazzanine总线。
计算机210通常包括多种计算机可读介质。计算机可读介质可以是可由计算机210访问的任何可用介质,其包括易失性和非易失性介质、可移动和不可移动介质。作为例子,但并非限制,计算机可读介质可包含计算机存储介质和通信介质。计算存储介质包括易失性和非易失性、可移动和不可移动介质,其以诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息存储的任何方法和技术来实现。计算机存储介质包括,但不局限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、盒式磁带、磁带、磁盘存储或其它磁存储设备,或者任何其它计算机存储介质。通信介质通常包含已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,该已调制数据信号如包括任何信息递送介质的载波或其它传送机制。术语“已调制数据信号”意指其一个或多个特征以对信号中的信息进行编码的方式来设置为或改变的信号。作为例子,但并非限制,通信介质包括有线介质,如有线网络或单线连接,以及无线介质,如声学、RF、红外和其它无线介质。任何上述组合也应被包括在计算机可读介质的范围内。
系统存储器230包括计算机存储介质,其形式为易失性和/或非易失性存储器,如只读存储器(ROM)231和随机存取存储器(RAM)232。基本输入/输出系统233(BIOS)包含基本例程,该例程如在启动期间帮助在计算机210内的元件之间传递信息,该基本输入/输出系统233(BIOS)通常储存在ROM 231中。RAM 232通常包含可由处理单元220立即存取和/或当前正由处理单元220操作的数据和/或程序模块。作为例子,但并非限制,图2示出了操作系统234、应用程序235、其它程序模块236以及程序数据237。
计算机210也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为例子,图2示出对不可移动、非易失性磁介质进行读写的硬盘驱动器241、对可移动、非易失性磁盘252进行读写的磁盘驱动器251、以及对诸如CD-ROM或其它光介质这样的可移动、非易失性光盘256进行读写的光盘驱动器255。可用于示例性操作环境中的其它可移动/不可移动、易失性/非易失性计算机存储介质包括,但不局限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器241通常通过诸如接口240这样的不可移动存储器接口与系统总线221相连,而磁盘驱动器251和光盘驱动器255通常通过诸如接口250这样的可移动存储器接口与系统总线221相连。
上述在图2中示出的驱动器及其相关联的计算机存储介质为计算机210提供计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图2中,硬盘驱动器241被示出为储存操作系统244、应用程序245、其它程序模块246以及程序数据247。注意,这些组件或者与操作系统234、应用程序235、其它程序模块236以及程序数据237相同,或者与其相异。操作系统244、应用程序245、其它程序模块246,以及程序数据247在这里被赋予不同的标号,用以阐明它们至少是不同的副本。用户可通过诸如键盘262和定点设备261这样的输入设备将命令和信息输入到计算机210中,定点设备261一般指鼠标、跟踪球或触摸垫。其它的输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪等等。这些和其它的输入设备通常通过耦合到系统总线的用户输入接口260与处理单元220相连,但是其也可用其它接口和总线结构连接,如并行端口、游戏端口或者通用串行总线(USB)。监视器291或其它类型的显示设备也通过诸如视频接口290这样的接口与系统总线221相连。除监视器之外,计算机也可包括其它外围输出设备,如扬声器297和打印机296,其可通过输入/输出外围接口295连接。
计算机210可在使用到诸如远程计算机280这样的一个或多个远程计算机的逻辑连接的网络化环境中工作。该远程计算机280可以是个人计算机、服务器、路由器、网络PC、对等设备或者其它公用网络节点,其通常包括许多或所有上述相对计算机210描述的元件,尽管在图2中仅示出了存储器存储设备281。图2中描述的逻辑连接包括局域网(LAN)271和广域网(WAN)273,但是其也可包括其它网络。这样的网络环境常见于办公室、企业范围计算机网络、内联网和因特网。
当在LAN网络化环境中使用时,计算机210通过网络接口或适配器270与LAN 271相连。当在WAN网络化环境中使用时,计算机210通常包括调制解调器272或用于通过诸如因特网这样的WAN 273建立通信的其它装置。调制解调器270可以是内置或外置的,它可通过输入/输出外围接口295或者其它适当的机制与系统总线221相连。在网络化环境中,相对计算机210描述的程序模块或其部分可储存在远程存储器存储装置中。作为例子,但并非限制,图2示出远程应用程序285驻留在存储器设备281中。应当认识到,所示网络连接仅是说明性的,也可使用在计算机之间建立通信链路的其它装置。
图3B示出web服务300,它包括程序300A,其是可由计算装置执行的web服务300的指令序列,并包括规范300B(在图中以“规范”示出),其是web服务300的接口描述。规范300B与WSDL合约不同,其包含描述外部web服务可调用web服务300操作的次序的安全规则(以下称“安全性”)。换言之,每个安全性描述了web服务300操作的容许或准许调用排列,使用该调用排列,外部web服务可调用以对由web服务300提供的服务进行访问。若这些安全性对渴望使用web服务300的服务的外部web服务是不可接受的,则将不形成任何虚拟合约。否则,若安全性对外部web服务是可接受的,则将形成虚拟合约,且外部web服务和web服务300之间的安全互操作性是可能的。
阐明web服务300的结构302的框图在图3A中示出。服务元素302A通过将一组端口(未示出)组合在一起而分类地区分由规范300B所描述的其它服务。每个端口与端口类型相关联。结构302具有端口类型302B。端口类型302B声明许多操作,如准备操作302D、做工作操作302E,以及清理操作302F。为清楚起见,在下面的讨论中使用下述术语:术语“操作”可与术语“消息”互换使用(相反,WSDL合约中的术语“消息”仅指操作的自变量);术语“参数”用于表示操作的自变量;术语“绑定”用于指两个安全性之间的编程关系,其在下面解释(相反,WDSL合约中的术语“绑定”指端口类型与特定传送协议的关联)。
操作302D-302F被调用的次序是由安全性302C指定的,其具有下面的形式:(1)S=prepare.SW;以及(2)SW=(dowork).SW+(cleanup)。安全性302C由规范300B的部分304来文本地表达。见图3C。行304A包含关键字端口类型,其声明有关端口类型定义的开始;标志符“start_work_stop”,其是端口类型的名称;以及打开花括号“{”,其具有与之匹配的关闭花括号“}”,以限定编程上定义端口类型的文本块。行304B声明准备(prepare)操作302D,其采用串作为参数。行304C声明做工作(dowork)操作302E及其参数一串。行304C声明具有串参数的清理(cleanup)操作302F。
行304B-304D上声明的这些操作是对外部web服务可用的操作,以使它们能够访问web服务300的服务。对某些web服务而言,为了与这些web服务的正确互操作性,操作应被以特定的次序被调用。例如,在web服务300中,准备操作302D应在做工作操作302E之前被调用,而做工作操作302E应在清除操作302F调用之前被调用。为允许传达这个排序信息,可依照本发明形成一个或多个安全性。见行304E、304F。安全性的排列细微差别可使用图4中所示的人类可读句法400(下文描述)或图7A中所示的模型句法702(下文描述)来表达。
行304E、304F上的安全性是用两条语句表达的:(1)S=prepare.SW;以及(2)SW=(dowork).SW+(cleanup)。字母S是第一安全性的名称,字母W是第二安全性的名称。每个等号“=”表示安全性等同于等号“=”右边的规则。在安全性S的句点“.”之前是准备操作302D,其表示准备操作302D要首先被调用,之后安全性SW生效。在做工作操作302E之后但在安全性SW之前的句点“.”表示做工作操作302E是在安全性SW的递归可能出现之后调用的。换言之,做工作操作302E之后的短语“.SW”表示没有或有几个做工作操作302E的调用是可能的。加号“+”表示做工作操作302E或者清理操作302F可在准备操作302D的调用之后被调用。放置在安全性SW语句最后的清理操作302F表示清理操作302F应被最后调用或由使用web服务300的服务的外部web服务调用。安全性S和SW之后的每个分号“;”表示行304E、304F上的安全性的语句终止。
端口类型和安全性可使用人类可读的句法400来表达,其在图4中示出(之后,它们可较佳地被放置在像规范300B这样的web服务规范中)。行400A包含有关端口的定义:端口类型标志符{签名*;安全性;},其中端口类型是声明端口类型定义开始的关键字;标志符是端口类型的标识符;打开和关闭花括号对限定定义端口类型的表达式;安全性表示定义调用由签名所描述操作次序的规则。每个签名(可能有不止一个,其用星号“*”表示)具有句法表达式“标志符([标志符:线性类型,标志符:线性类型])”,如行400B所示,其中,第一标志符是特定操作的标识符;由圆括号对界定的第二和第三标志符表示操作参数标识符;且两个线性类型定义了每个参数的数据类型(为简单起见,对于行400B上的签名仅定义两个参数槽(parameter slot),但是可能有不止两个);冒号“:”表示位于冒号左边的参数标志符具有冒号右边声明的数据类型;逗号“,”将一个参数与另一个参数划分开来;圆括号对“()”限定由操作使用的参数及其类型。
行400C-400I定义了不同的安全性类型。停止安全性在行400C处声明。停止安全性表示安全性的静止或停止。行400D上声明的顺序安全性定义调用web服务的操作或消息的次序。行400E上声明的选择安全性表示可在安全性中选择的备选方案。在行400G中,并行安全性被定义,以表示两个安全性的并发、分布式处理。递归安全性定义其用途是安全性递归的变量,其在行400H上声明。在行400I上声明的参考安全性表示安全性可被赋予要与其它安全性组合使用的名称。行400J示出停止安全性是由符号零“0”组成的。顺序安全性是由函数签名及其后的句点“.”组成的,该句点后面是另一个安全性。见行400K。选择安全性是由两个安全性组成的,其由加号“+”分隔(见行400L)。在行400N上定义的并行安全性是由两个安全性组成的,其由垂直线符号“|”分隔开来。递归安全性是由关键字“rec”及其后界定标志符的一对圆括号组成的,而且其后面是句点和另一个安全性规则。见行400O。使用递归安全性,安全性(S=prepare.SW;SW=(dowork).SW+(cleanup))可被等同地写为安全性(prepare.rec(SW).((dowork).SW+(cleanup)))。行400P表示参考安全性仅仅是标志符,它是名称或标识符。
使用人类可读句法400,安全性的表达细微差别可被指定,以增强web服务中的安全互操作性。每个安全性较佳地被放置在web服务规范的端口类型定义中。为便于讨论图4以后的附图,在这里示出人类可读句法400。更受限制的但同等具有表达性的是图7A中所示的模型句法702(下文描述)。人类可读句法和模型句法702均可使用合适的可定制、基于标签的语言而形成。可使用任何合适的可定制、基于标签的语言。一个合适的语言包括XML模式语言。通过使用可定制、基于标签的语言,依照本发明形成的安全性可适合WSDL合约的现有端口类型定义。
文件服务器web服务502在图5A中以框图形式示出。文件服务器web服务提供有关网络上其它web服务的文件存储服务。不像磁盘服务器,文件服务器web服务502不仅储存文件,而且对它们进行管理,并当其它web服务请求文件并对其进行改变时维持顺序。为处理操作有关文件的多个(有时是同时的)请求的任务,web服务502与处理器和控制软件以及用于存储的磁盘驱动器交互。
文件服务器web服务502包括服务元素502A、端口类型502B以及其它元素(未示出)。端口类型502B定义多个操作,如打开操作502D、读操作502E、写操作502F以及关闭操作502G。这些操作502D-502G在文件服务器web服务规范的部分504中进一步定义。见图5B。端口类型502B也定义安全性502C,其指定外部web服务通过操作502D-502G来访问由文件服务器web服务502D提供的服务的次序。安全性502C在部分504中进一步定义。见行504F、504G。文件服务器web服务502的部分502H允许其它web服务结合(下面将详细描述),以通过调用操作502D-502G而对文件服务器web服务502B的服务进行访问。
部分504注重文件服务器web服务规范的许多端口类型中的一个端口类型定义。行504A包含关键字porttype(端口类型),其后是标志符“fileserver(文件服务器)”,以及用于限定文件服务器端口类型502B的定义的一对打开和关闭花括号。行504B声明了将文件名(filename)作为参数的打开(open)操作502D的签名。在所有的情况下,为使用文件服务器web服务502的服务,外部服务指定要通过打开操作502D而打开的文件名。这样,打开操作502D应当是由外部web服务对每个特定的文件服务器会话调用的第一操作。读(read)操作502E在行504C中声明。读操作将客户机的端口(clientport)作为参数。当读操作502E被外部web服务调用时,文件服务器web服务502从打开的文件中读取一大块数据,并将该读取的数据发送到给定客户机的端口。外部web服务也可通过写(write)操作502F将信息写到打开的文件中,其在行504D中声明。写操作将数据(date)作为参数。该数据由写操作写到打开的文件中。当所有需要的操作都已经在打开的文件上实现时,打开的文件可通过关闭(close)操作502G而被关闭,其在行504E中声明。关闭操作502G将文件名(filename)作为自变量,以使关闭操作502G知道该关闭哪个文件。
行504F-504G包含文件服务器端口类型502B的安全性。行504F包含安全性语句:S=open.Srw,其中S是安全性规则;open表示打开(open)操作502D是要在文件服务器会话中调用的第一操作;句点“.”表示附加安全性要跟随在打开操作502D的调用之后;Srw指在行504G上进一步定义的第二安全性。行504G包含以下安全性语句:Srw=read.Srw+write.Srw+close,其中,Srw表示第二安全性;read.Srw表示读(read)操作502E的调用,其后面再次是第二安全性(递归);write.Srw表示写(write)操作502F的调用;其后面递归跟着第二安全性;close表示关闭(close)操作502G的调用;加号“+”表示外部web服务可作出的选择,以在读操作502E、写操作502F或关闭操作502G中作出调用。
系统500示出在创建了虚拟合约之后,web服务502、508的互操作性。见图5C。当web服务502、508之间的端口502H、508A的端口类型兼容的时,创建虚拟合约。更具体的说,当端口502H、508A的端口类型的安全性对web服务502和508两者均可接受时,创建虚拟合约。虚拟合约并非物理退出的,而是当端口类型的安全性以确保web服务502、508之间的安全互操作性的方式彼此对齐时出现的。为清楚起见,文件服务器web服务502的许多元素未在图5C中示出。文件服务器web服务502可在诸如蜂窝电话等计算装置上执行;客户机web服务508可在诸如个人数字助理510等计算装置上执行;储存web服务512可在诸如台式机514等计算装置上执行。
客户机web服务508的端口508A被示出为与文件服务器web服务502的端口502H结合的。客户机web服务508和文件服务器web服务502之间的这一结合在客户web服务508示出其愿意遵从文件服务器端口类型502B的安全性之后是可能的。随着端口508A-502H的结合,客户机web服务508可依照并以由文件服务器端口类型的安全性所指定方式来访问并调用文件服务器web服务502的操作502D-502G。
假定客户机web服务508已经被调用了打开操作502D,以打开文件。客户机web服务508可调用读操作502E,以获取读取的数据。在读操作502E的调用中,客户机web服务508提供端口508B,以在读操作502E的调用之后接收读取的数据。文件服务器web服务502包括端口502I,用于将读取的数据发送到端口508B。然而,端口508B不必为客户机web服务508处的实际端口。端口508B可由另一个web服务,如储存web服务512虚拟地提供。虚拟合约可在客户web服务508和储存web服务512之间形成,以用客户机web服务508所需要的特定方式储存信息。客户机web服务并非将端口508B作为参数提供给读操作502E,而是可提供储存web服务512的端口512A,以使由读操作502E所读取的数据自动被转发到储存web服务512中。这可出现,而不为文件服务器web服务502所知。这样,每个端口就是可转移的量,其可被给予web服务,以扩展web服务的通信概率。在这个例子中,文件服务器web服务502的现有范围局限于与客户机web服务508的交互,但是当端口512A通过客户机web服务508被传递到文件服务器web服务502时,它随后可被扩展以包括储存web服务512。
web服务的连接,如文件服务器web服务502与储存web服务512的连接,是通过使用依照本发明形成的安全性经由虚拟合约完成的。web服务的这种连接提高了web服务的安全互操作性,以创建比每个web服务可单独提供的更大的功能。此外,由于web服务的连接是编程上形成的,所以若遵从web服务安全性的话,web服务更可信、更可靠,且更有效。依照本发明形成的编程连接在面对web服务的互操作性中的无效请求或者被破坏的持久保存的数据时,减少或消除了错误、丢失请求、故障,。
上述结合图3A到3C的讨论将安全性的概念引入到web服务的规范中。由于端口类型包含外部web服务可调用来访问由所需web服务提供的服务的操作的声明,因此安全性较佳地被放置在端口类型内部。如同上面也已经讨论过的,安全性描述了外部web服务必须调用所需web服务的操作以获取所需服务的次序。若外部web服务最初不能遵从另一个web服务的安全性,则在两个web服务之间就没有绑定协定(虚拟合约),且不遵从的web服务不能调用另一个web服务的服务。在两个web服务之间创建虚拟合约的一个例子已在上面结合图5A-5C讨论。由于客户机web服务508愿意遵从文件服务器web服务502的安全性,所以客户机web服务508的端口508A可与文件服务器web服务502的端口502H结合。这样的结合允许客户机web服务器508在端口502H处调用文件服务器web服务502的服务。更具体的说,虚拟合约可在客户机web服务508端口508A的端口类型编程上与文件服务器web服务502端口502H的端口类型兼容(或遵从其安全性)时创建。结合图6A-6I的讨论不是形成两个web服务之间的虚拟合约,而是注重依照本发明形成的三个web服务(购买者web服务602、供应商web服务606,以及发货者web服务610)之间的绑定协定。然而,可形成虚拟合约而不考虑参与的web服务的数量,只要每个web服务愿意遵从其它参与web服务安全性。
购买者web服务602包括服务元素602A和端口类型元素602B,以及其它元素中(未示出)。端口类型602B包括启动购买(initiatepurchase)操作602D、确认购买(confirmpurchase)操作602E,以及指定操作602D-602E的调用的安全性602C。购买者web服务602也可包括端口602F,其数据类型是端口类型602B。见图6A。购买者web服务规范的一部分604在图6B中示出。行604A包含关键字porttype(端口类型);端口类型的标志符“purchaser(购买者)”;以及打开花括号“{”,其具有成对的关闭花括号,以限定购买者端口类型602B的定义。行604B包含初始购买操作602D的签名,其具有两个参数。一个参数是购买次序参数,表示为“PO”。另一个参数是提前发货通知“~ASN”,那里代字号“~”表示购买者web服务602消耗由参数ASN所代表的数据。行604C包含确认购买者操作602E的签名,其采用“invoice(发票)”参数和“goods(货物)”参数。发票参数被代字号“~”限定,以表示购买者web服务602消费由invoice参数所表示的数据。PO参数和goods参数均没有被代字号限定,因此,这表明购买者web服务602是生产者或由这些参数所表示的数据源。行604D包含有关购买者端口类型602B的安全性。简言之,启动购买操作602D的调用必须在确认购买操作602E的调用之前出现,其后面跟随操作602D、602E的调用递归。
供应商web服务606以框图的形式在图6C中示出。供应商web服务606包括服务元素606A和端口类型元素606B,以及其它元素(未示出)。端口类型606B是有关供应商web服务606的端口606F的数据类型。端口类型606B包含接收po(receivepo)操作606D、发送发票(sendinvoice)操作606E、以及指定操作606D、606E的调用次序的安全性606C。供应商web服务606也包括端口606F,其数据类型是端口类型606B。供应商web服务规范的一部分608在图6D中示出。行608A包含供应商端口类型606B的声明(porttype supplier),并包括打开花括号“{”,其具有成对的关闭花括号,以限定供应商端口类型606B的定义。行608B包含接收po操作的签名,其采用购买次序“~PO”作为参数。代字号表明供应商web服务606消耗由购买者次序~PO参数所表示的数据。行608C包含发送发票操作606E的签名,其采用invoice(发票)作为参数。行608D包含有关供应商端口类型606B的安全性。简言之,接收po操作606D要在发送发票操作606E调用之前被调用,其后可跟随操作606D、606E的递归调用。
如图6E所示,发货者web服务610包括服务元素610A和端口类型元素610B,以及其它元素(未示出)中。端口类型610B描述发货者web服务610的端口610F的数据类型。端口类型610B包括发货通知(notifyofshipment)操作610D、确认接收(confirmreceipt)操作610E,以及指定操作610D、610E的调用次序的安全性610C。发货者web服务规范的一部分612以文本形式在图6F中示出。行612A包含发货者端口类型610B的声明(porttype shipper)和打开花括号“{”,其具有成对的关闭花括号“}”,以限定发货者端口类型610B的定义。行612B包含发货通知操作610D的签名,其采用提前发货通知“ASN”作为参数。因为提前发货通知ASN不由代字号限定,所以发货者web服务610是生产者或由ASN参数表示的数据源。行612C包含确认接收操作610E的签名,其采用“~goods(货物)”作为自变量。标志符“goods”前的代字号表示发货者web服务610是由“goods”参数表示的数据的消费者。行612D包含有关发货者端口类型610B的安全性。简言之,发货通知操作610D的调用发生在确认接收操作610E的调用之前,而且之后,可发生操作610E递归调用。
图6G中示出用于表达购买者web服务602、供应商web服务606以及发货者web服务610的组合的程序的一部分614。行614A包含购买者web服务602的签名,其具有标明为具有购买者端口类型602B的“PC”的端口。行614B包含供应商web服务606的签名,其具有标明为具有供应商端口类型606B的“PS”的端口。行614C包含发货者web服务610的签名,其具有标明为具有运货者端口类型610B的“PH”的端口。
行614I包含关键字服务,其宣布web服务或web服务组合的定义的开始;标志符“scm_purchaser_supplier_shipper”表示web服务602、606和610的组合的名称;打开花括号“{”具有成对的关闭花括号“}”,以限定web服务的组合的定义。行614J包含关键字new,其定义端口的唯一名称并将这些端口与特定的端口类型相关联:购买者端口类型6002b的新端口“PC”;供应商端口类型606B的新端口“PS”;发货者端口类型610B的新端口“PH”;以及打开花括号“{”,其具有成对的关闭花括号“}”,以限定这些新端口PC、PS、PH的操作范围。行614K包含关键字parallel,其表示在打开花括号“{”和成对的关闭花括号“}”之间表达的服务和处理是要并行执行的。
行614L包含对另一个web服务组合的调用,其被称作“scm_purchaser_supplier”,采用端口PC、PS作为参数。另外,web服务组合的定义“scm_purchaser_supplier”开始于行614D。行614D包含关键字服务,其表明web服务或web服务组合的定义即将开始;标志符scm_purchaser_supplier表示web服务组合的名称;参数PC,它是购买者端口类型602B的端口602F;参数PS,它是供应商端口类型610B的端口610F;打开花括号“{”,它具有成对的关闭花括号“}”,以限定web服务组合scm_purchaser_supplier的定义。行614E包含关键字parallel,以表示在打开花括号“{”和关闭花括号“}”之间定义的web服务和处理要并行执行。行614F调用购买者web服务602,其具有被指定为PC的端口602F。行614G调用供应商web服务606,其具有被指定为PS的端口606F。行614H调用依照本发明形成的结合机制,以将端口602F(指定为PC)和端口606F(指定为PS)结合起来。端口602F、606F是否可结合取决于购买者web服务602的端口类型602B是否与供应商web服务606的端口类型606B兼容。更具体的说,若购买者web服务602的安全性602C可与供应商web服务606的安全性606C对齐,以产生输入防护过程,则端口602F、606F的结合是可能的。换言之,若安全性602C、606C可被对齐,则将购买者web服务602和供应商web服务606之间的端口602F、606F结合在编程上是安全的。可为购买者web服务602和供应商web服务606之间的安全互操作性创建虚拟合约。这将在下面结合图8A-8O来详细描述。
返回到web服务组合scm_purchaser_supplier的定义,行614M包含发货者web服务610的调用,其将指定为PH的端口610F作为参数。行614N包含依照本发明在端口602F(PC)和端口610F(PH)之间形成的结合机制的调用。若由于安全性或端口类型之间的不兼容而不能完成端口之间的结合,则端口将不会被结合。
图6H是包括购买者web服务602、供应商web服务606,以及发货者web服务610的系统600中操作调用的动态可视化演示。系统600通过调用启动购买操作602D并产生购买次序(PO)来开始执行。然后,购买者web服务602调用供应商web服务606的接收po操作606D、提供产生的购买次序(PO),然后购买次序(~PO)被供应商web服务606消耗。随后,发送发票操作606E被调用,产生发票。然后,供应商web服务606调用确认购买操作602E或购买者web服务602、提供产生的发票(invoice),且产生的发票(~invoice)由购买者web服务602消耗。接下来,供应商web服务606调用发货者web服务610的发货通知操作610D,并提供提前发货通知(ASN)。发货者web服务610随后将提前发货通知(ASN)提供给购买者web服务602,并且购买者web服务602消耗该提前发货通知(~ASN)。购买者web服务602接下来调用发货者web服务610的确认接收操作610E,并提供货物(goods)的接收。运货者web服务610进而提供货物(goods)的接收,并且货物的接收(~goods)由购买者web服务602消耗。
前述图6中的讨论示出了由安全性602C、606C和610C指定的调用次序。然而,通过研究消息的产生和消耗,web服务602-610之间的互操作性可被更好地认识到。见图6I,当购买次序(PO)在购买者web服务602的端口602F处产生并被发送到供应商web服务606的端口606F时,系统600开始,其中购买次序(PO)被消耗。购买次序(PO)的产生是由没有启动购买操作602D的参数列表中的代字号“~”的标志符PO表示的。购买次序(PO)的消耗是由具有参数~PO的接收po操作606D表示的。由启动购买操作602D广泛表示的第一过程变成不活动(由于安全性602C),这是因为端口602F已经发送了购买者次序(PO),但是没有接收到提前发货通知(~ASN)。由接收po操作606D广泛表示的第二过程继续到发送发票操作606E广泛表示的第三过程(由于安全性606C),这是因为端口606F已经接收到购买次序(~PO)。当第三过程变为活动时,发票在端口606F处产生,并被发送到购买者web服务602的端口602F,在那里发票被消耗。现在满足了安全性606C。发票的产生是由发送发票操作606E表示的,而发票的消耗是由确认购买操作602E表示的。由确认购买操作602E广泛表示的第四过程变成不活动(由于安全性602C),这是因为端口602F没有接收到提前发货通知(~ASN)。一旦供应商web服务606在端口606F处接收到了购买者次序(PO),则在供应商web服务606和发货者web服务602之间发生小型计算机通信(mini communication)。提前发货通知(ASN)是由端口610F处的发货者web服务610产生的,并被发送到购买者web服务602的端口602F,在那里它被消耗。由发货通知操作610D广泛表示的第五过程继续到由确认接收操作610E广泛表示的第六过程(由于安全性610C),这是因为端口610F已经发送了提前发货通知(ASN),但是第六过程由于端口610F没有接收到货物(~goods)的接收而变成不活动。由启动购买操作602D广泛表示的第一过程变成活动,并且继续到由确认购买操作602E广泛表示的第四过程(由于安全性602C),这是因为端口602F已经接收到提前发货通知(~ASN)。提前发货通知(ASN)的产生是由发货通知操作610D表示的,且提前发货通知(ASN)的消耗是由启动购买操作602D表示的。由确认购买操作602E广泛表示的第四过程变成活动(由于安全性602C),这是因为端口602F已经接收到提前发货通知(~ASN)。随着第四过程的激活,货物(goods)的接收在购买者web服务602的端口602F处产生,并且其被发送到发货者web服务610的端口610F,那里它被消耗。货物(goods)的接收的产生是由确认购买操作602E表示的,且货物(goods)的接收的消耗是由确认接收操作610E表示的。货物(goods)的接收的产生满足安全性602C。由确认接收操作610E广泛表示的第六过程变成活动,这是因为端口610F已经接收到货物(~goods)的接收,且然后满足了安全性610C。上文的讨论示出当消息和操作的处理细微差别是使用依照本发明形成的安全性来表达时,消息和操作的内在同步(活动性和不活动性)。
端口类型的模型句法702在图7A中示出。模型句法702的不同元素类似于人类可读句法400的元素(在行400C-400P中描述的安全性句法类别)。字母PT 702E包含端口类型的定义:porttype name{(M;)*S;},其中porttype是声明端口类型定义的开始的关键字;name是端口类型的标识符;打开和关闭花括号对限定定义端口类型的表达式;字母M包含消息(下文描述);字母S(下文描述)表明一个或多个安全性。字符S 702A表示要由模型句法702的各个元素定义的已命名安全性的集合。符号“0”702B表示不活动或停止的安全性。短语“M.S”702C表示顺序安全性,其中字母M表示消息类型702I,其后是另一个安全性702A。短语“S0+S1”702D表示要在安全性S0或安全性S1的执行之间做出的选择。短语“S0|S1”702F表示安全性S0和S1的并行执行。短语“rec(K).S”702G表示安全性S中名称K 702J的递归。短语“K”702H表示可向安全性702A给予一名称。
图7B示出系统700,它示出了第一web服务706和第二web服务710之间的互操作性,第一web服务706具有安全性S1 706A;消息1操作706B;消息2操作706C;以及端口706D。第二web服务710包括安全性S2 710A;消息3操作710B;消息4操作710C;以及端口710D。所示第一web服务706和第二web服务710被结合行703结合。
图8A-8O示出用于形成诸如第一web服务706和第二web服务710等web服务中的互操作性的方法800。为清楚起见,方法800的以下描述对结合图7A-7B中所示的模型句法702和系统700示出的不同元素做出参考。从起始框开始,方法800前进到一组方法步骤802,其在延续终端(“终端A”)和退出终端(“终端B”)之间定义。该组方法步骤802描述了对应于第一和第二web服务706和710的web服务程序的web服务规范的创建。
从终端A(图8B)开始,方法800前进到框808,在那里开发者创建第一web服务706的规范的抽象定义。规范的抽象定义包括数据类型、消息以及端口类型的定义。接下来,开发者创建规范的具体描述。见框810。具体描述包括绑定(不要与下述依照本发明形成的绑定机制混淆),即指定数据传送的协议、串行化和编码之处。具体描述包括服务元素,它指定每个绑定的端口地址。然后,开发者为第一web服务706的规范创建安全性S1 706A,它支配诸如消息1操作706B和消息2操作706C等操作的调用。见框812。然后,开发者较佳地将安全性S1 706A(以下称“S1”)放置到端口606D的端口类型的定义中。见框814。步骤808-814可被重复,以创建第二web服务710的规范,这包括安全性S2 710A(以下称“S2”)。接下来,方法800前进到退出终端B。
从退出终端B(图8A),方法800前进到一组方法步骤804,其在延续终端(“终端C”)和退出终端(“终端D”)之间定义。该组方法步骤804描述了第一web服务706对第二web服务710的发现,以及第二web服务710与第一web服务706安全交互能力的验证。
从终端C(图8C),方法800前进到框816,在那里第一web服务707通过合适的发现服务,使用第二web服务710的规范而发现端口710D的端口类型。一个合适的发现服务包括UDDI服务,但是其它也是可能的。第一web服务706随后选择端口706D的端口类型,它将与来自第一web服务706的规范的端口710D结合。见框818。然后,第一web服务706提取端口706D的端口类型的安全性S1和端口710D的端口类型的安全性S2。见框820。接下来,过程800进入另一个延续终端(“终端C18”)。从终端C18,过程800进入框822,在那里第一web服务706通过试图将安全性S1、S2放置到绑定关系(S1:=:S2)中而核查端口706D和710D之间的互操作性。在判别框824,第一web服务706核查安全性S1是否是形式“0”,这表示不活动或停止安全性。若对判别框824处的测试回答是“是”,则方法800前进到另一个延续终端(“终端C1”)。否则,若回答是“否”,则方法800前进到另一个终端(“终端C2”)。
从终端C1(图8D),方法800前进到另一个判别框826,在那里第一web服务706判断安全性S2是否为“S”702A的形式。若回答是“否”,则进入另一个延续终端(“终端C19”)。否则,若对判别框826处的测试的回答是“是”,则安全性S1和安全性S2之间的绑定关系(0:=:S)等同于S2。见框828。从这里,方法800前进到另一个延续终端(“终端C20”)。
从终端C2(图8D),方法800前进到另一个判别框830,在那里第一web服务706判断安全性S1是否为“M.S.”702C的形式。若回答是“是”,则进入另一个延续终端(“终端C3”)。否则,若回答是“否”,则方法800前进到另一个延续终端(“终端C4”)。
从终端C3(图8E),方法800前进到另一个判别框832,那里第一web服务706判断安全性S2是否是表示并行安全性的形式“S0|S1”706F。若回答是“否”,则过程800进入终端C19。否则,若对判别框832处的测试回答是“是”,则进入框834,在那里与安全性S2绑定的安全性S1(M.S:=S0|S1)等同于两个选择(((S0/M)|S1):=:S)+((S0|S1/M)):=:S)。然后选择两个选择中的其中一个。见框836。接下来,方法800进入延续终端18,以循环回到框822,并重复上述步骤。
从终端C4(图8E),方法800前进到另一个判别框838,在那里第一web服务706判断安全性S1是否是表明选择安全性702D的“S0+S1”的形式。若回答是“是”,则进入另一个延续终端(“终端C5”)。否则,方法800前进到另一个延续终端(“终端C6”)。
从终端C5(图8F),方法800前进到另一个判别框840,在那里第一web服务706判断安全性S2是否为“S”702A的形式。若回答是“否”,则方法800进入延续终端C19。否则,若回答是“是”,则与安全性S2绑定的安全性S1((S0+S1):=:S))就等同于两个选择((S0:=:S)+(S1:=:S))。见框842。然后选择这两个选择中的其中一个。见框844。接下来,方法800进入延续终端C18,以循环回到822,在那里重复上述的步骤。
从终端C6(图8F),方法800进入另一个判别框846,在那里第一web服务706判断安全性S1的形式是否为“M0.S0”,它是顺序安全性702C。若对判别框826处的测试回答是“否”,则进入另一个延续终端(“终端C8”)。若相反,回答是“是”,则方法800前进到另一个延续终端(“终端C7”)。
从终端C7(图8G),方法800前进到另一个判别框898,在那里第一web服务706判断安全性S2的形式是否为“M1.S1”702C。若回答是“否”,则方法800前进到终端C19。否则,若回答是“是”,则进入框848,在那里第一web服务706判断是否定义了采用M0和M1作为自变量的匹配函数。见框848。匹配函数的一种简单实现包括,若M0是M1的补集,则返回“真”布尔结果。否则,匹配函数将返回“假”布尔结果。若对判别框848处的测试回答是“否”,则与安全性S2绑定的安全性S1(M0.S0:=:M1.S1)是未定义的。见框894。然后,方法800前进到终端C20。若对判别框848处的测试回答是“是”,则选项“cut(M0,M1).(S0:=:S1)”被选择,其中,cut(切除)是将M0和M1作为自变量的函数。切除函数的一个较佳实现在图6A-6I中示出,其示出了购买者、供应商、发货者web服务中的互操作性。若匹配函数被定义成将类型与消息的对应类型相匹配,且切除函数被定义成移除这些对(类型和对应类型),则购买者web服务的动作是联合。换言之,购买者web服务在安全性中前进之前等待购买次序(PO)被消耗以及提前发货通知(ASN)被供给。接下来,方法800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。
从终端C8(图8L),方法800前进到另一个判别框822,在那里第一web服务706判断安全性S1 706A的形式是否为表示并行安全性702F的“S0|S1”。若回答是“否”,则方法800前进到另一个延续终端(“终端C11”)。否则,若回答是“是”,则进入另一个延续终端(“终端C9”)。
从终端C9(图8H),方法800前进到另一个判别框854,在那里第一web服务706判断第二web服务710的安全性S2的形式是否为“S2|S3”,它是并行安全性702F的形式。若对判别框854处的测试回答是“否”,则方法800前进到终端C19。否则,若回答是“是”,则方法800进入框856。在这个框处,与安全性S2绑定的安全性S1((S0|S1):=:(S2|S3))等同于一组四个选择(S0,2,3,1)+(S1,2,3,0)+(S2,0,1,3)+(S3,0,1,2)。对这四个选择中的每一个选择而言,做出测试,以判断是否对特定的选择定义了关系(Si:=:(Sm|Sn)):=:Sj。见判别框860。若对判别框860处的测试回答是“是”,则该特定选择等同于关系(Si:=:(Sm|Sn)):=:Sj。见框862。接下来,方法800前进到另一个延续终端(“终端C10”)。若相反,回答是“否”,则进入框864,在那里特定选择等同于关系(Si:=:(Sm|Sn)):=:S。方法800随后也前进到终端C10。
从终端C10(图8I),方法800前进到框866,那里选择四个选择(S0,2,3,1)+(S1,2,3,0)+(S2,0,1,3)+(S3,0,1,2)中的一个。然后,过程800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。
从终端C11(图8I),方法800前进到另一个判别框868,在那里第一web服务706判断安全性S1是否采用了表示递归安全性702G的rec(K).S0的形式。若对判别框868处的测试回答是“否”,则进入另一个延续终端(“终端C12”)。否则,若回答是“是”,则进入另一个判别框870,在那里第一web服务706核查安全性S2是否采用形式“S”702A。若对判别框870的测试回答是“否”,则方法800进入终端C19。若相反,回答是“是”,则方法800前进到框872,在那里与安全性S2绑定的安全性S1(rec(K).S0:=:S)等同于(S0{rec(K).S0/K}:=:S)。句法短语S0{rec(K).S0/K}意味着无论在安全性S0何处提及到K这是由模型句法702定义的名称K都由rec(K).S0替换。考虑到下面的例子:若短语“S0{rec(K).S0/K}”要被应用到安全性句子“S0=open.close.S0”中,则将产生下面的结果:“S0=open.close.rec(S0).open.close.S0”。这样,示例中的“S0”是递归安全性“rec(K)”中的K。接下来,方法800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。若对判别框870的测试回答是“否”,则方法800前进到终端C19。
从终端C12(图8J),方法800前进到另一个判别框874,在那里第一web服务706核查安全性S1的形式是否为“S”702A。若回答是“否”,则方法800前进到终端C19。否则,若回答是“是”,则就进入另一个判别框876。在这个判别框处,第一web服务706判断安全性S2的形式是否为“0/S0”。如回答是“否”,则方法800前进到另一个延续终端(“终端C13”)。否则,若对判别框876的测试回答是“是”,则与安全性S2绑定的安全性S1(S:=:0/S0)就是未被定义的。见框878。然后,方法800前进到终端C20。
从终端C13(图8K),方法800前进到另一个判别框880,在那里第一web服务706验证安全性S2的形式是否为“M0.S/M1”。若回答是“否”,则方法800前进到另一个延续终端(“终端C14”)。若回答是“是”,则第一web服务706判断是否定义了采用M0、M1作为自变量的匹配函数。见框882。匹配函数的一种简单实现包括,若M0是M1的补集,则返回“真”布尔结果。否则,匹配函数将返回“假”布尔结果。若对判别框882处的测试回答是“否”,则与安全性S2绑定的安全性S1(S:=M0.S/M1)是未定义的。见框886。方法800随后前进到终端C20。若对判别框882处的测试回答是“是”,则安全性S2就等同于“cut(M0,M1).S”,其中cut(切除)是采用M0、M1作为自变量的函数。切除函数的一个较佳实现在图6A-6I中示出,其示出购买者、供应商、发货者web服务中的互操作性。若匹配函数被定义成将类型与对消息的对应类型进行匹配,且切除函数被定义成移除这些对(类型和对应类型),则购买者web服务的动作是联合。换言之,购买者web服务在安全性中前进之前,等待购买次序(PO)被消耗以及提前发货通知(ASN)被供给。接下来,过程800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。
从终端C14(图8L),方法800前进到另一个判别框888,在那里第一web服务706判断安全性S2的形式是否是“(S0+S1)/M”。若回答是“是”,则安全性S2等同于两个选择(S0/M)+(S1/M)。见框890。选择这两个选择中的一个。见框892。接下来,方法800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。若对判别框888的测试回答是“否”,则方法800前进到另一个延续终端(“终端C16”)。
从终端C16(图8M),方法800前进到另一个判别框899,在那里第一web服务706核查安全性S2,以决定其是否具有形式(S0|S1)/M。若回答是“否”,则方法800前进到另一个延续终端(“终端C17”)。否则,若回答是“是”,则安全性S2就等同于两个选择(S0/M)&(S1/M)。见框897。接下来,过程800前进到框895,在那里随后选择两个选择中的一个。然后,方法800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。
从终端C17(图8N),方法800前进到另一个判别框893,在那里第一web服务706判断安全性S2的形式是否为rec(K).S/M。若回答是“是”,则安全性S2就等同于(S{rec(K).(S/K)}/M)。见框891。然后方法800前进到终端C18,以循环回到框822,在那里重复上述方法步骤。否则,若对判别框893处测试的回答是“否”,则进入终端C19。
从终端C19(图8N),第一web服务706判断是否由于安全性S1或安全性S2没有遵循模型句法702而出现了句法错误。见框889。端口706、710D之间的结合是不可能的,这是因为安全性S1、S2并不是可计算的形式。然后,方法800终止处理。从终端C20(图8N),方法800前进到框887,在那里临时安全性S3被设置为等同于安全性S1和安全性(S3=S1:=:S2)之间的绑定关系的结果。方法800随后进入退出终端D。
从退出终端D,方法800前进到一组方法步骤806,其在延续终端(“终端E”)和退出终端(“终端F”)之间定义。若安全性S1和安全性S2能以允许第一web服务706和第二web服务710之间安全互操作性的合适方式对齐,则该组方法步骤806创建第一web服务706和第二web服务710之间的虚拟合约,它是一种绑定协定。
从终端E(图8O),方法800前进到另一个判别框855,在那里第一web服务706判断安全性S3(它是安全性S1和安全性S2之间绑定关系的结果)是否等于零。若对判别框885处的测试回答是“是”,则第一web服务706的端口706D可与第二web服务710的端口710结合。见框881。当两个端口能以这种方式结合时,第一web服务706和第二web服务710之间的互操作性就是安全的。术语“安全”意味着存在一输入防护过程;每个输出都满足一输入;或者没有死锁,这是因为第一web服务706或第二web服务710的输入总是可用于接收消息以进行处理。一旦端口706D、710D被结合,第二web服务710就可开始与第一web服务706进行通信,以提供或获取所需服务。见框879。然后,方法800前进到退出终端F,在那里它终止处理。
若对判别框855的测试回答是“否”,则进入另一个判别框883,在那里第一web服务706判断它是否可容许端口706D和710D的某一程度的不安全结合。若回答是“是”,则重复方法步骤881、879。否则,对判别框883处的测试回答是“否”,则端口706D、710D不被结合;而且方法800前进到退出终端F,在那里它终止处理。
虽然已经示出并描述了本发明的较佳实施例,但是应当认识到,在不背离本发明主旨和范围的前提下可对其作出各种改变。
附录A
1.服务、端口和端口类型
1.1作为过程的服务。提供给这篇论文的空间未提供对移动过程理论的真实介绍。好奇的读者可发现有关该主题的丰富文献资料,而且也鼓励读者对其进行调查。特别地,Milner所著的The Polyadic Pi Calculus:A Tutorial仍旧是作者已经读到的最好介绍。
说由web服务所采纳的简单本体论是对移动过程的代数处理而采纳的相同基础本体论就足够了。即,П积分(及其相关物)是根据端口的抽象化而构建的,其通常被称作该设置内的名称。过程是根据端口集合处的输入/输出请求上的同步约束而构建的。
例如,П积分的对称版本提供下面的过程类。
P ∷=0
| (new x)P
| P|P
| rec(k).P
| k
| <x=y>
例1.1.1下面的范例提供期望被初始化的,然后愿意接受重复工作请求或最终请求的服务的本质实现。
(new init s)x[init s].(rec(k).(new work wr fin fr)(x[work wr].k+x[fin fr])))web服务和世界的过程代数视角之间的这个对应关系不是偶然的。涉及一个开发的人是涉及另一个开发的。例如,本论文的第一作者也是WDSL规范的合著者。
2.具有安全性的端口类型
2.1安全性表达式。计划用端口上期望的协议的规范来扩展端口类型。特别地,提出小的与上下文无关的语言,其包含下列作为基本的语言组合器:顺序、选择、并行和递归。这个语言的终端是从与端口类型相关联的消息类型中提取的。
具体的说,若M是期望到达类型P端口的消息类型集,而K是可数名称集,则给定K时M上的合法安全性表达式的集合(表示为Lk(M))如下被递归定义。
0∈LK(M)
S∈LK(M),m∈M m.SLK(M)
S0∈LK(M),S1∈LK(M) S0+S1∈LK(M)
S0∈LK(M),S1∈LK(M) S0|S1∈LK(M)
k∈K,S∈LK(M) rec(k).S∈LK(M)
k∈K k∈LK(M)
注解2.1.1注意,这个定义是消息类型集的参变量。因此,它与用于定义消息类型的系统是相当无关的。任何良好形成的模式定义,如XSD会起作用。
注解2.1.2同样的,根据XSD模式对安全性表达式集合进行编码是非常直接的,其不提供附加洞察力,但是其在相当程度上弄乱了页并模糊了主题。相反,引入更多起作用的人类可读句法是方便的。
注解2.1.3熟悉过程代数的读者会注意到,因为语言既不包含重贴标签和限制,又不包含新的名称构造函数,所以从严格意义上说,它比完全的CCS或П积分表达力更弱。
2.1.1模型句法
PT ∷=porttype name{(M;)*S;}
S ∷=0
| M.S
| S0+S1
| S0|S1
| rec(k).S
| k
M ∷=messagetype
K ∷=name
2.2示例
例2.1.1例证的示例是服务必须被初始化,然后愿意接收重复的工作请求或最终请求的示例。
端口类型
porttype StartWorkStop{
//字母表
initialize(string);
doWork(string);
finalize(string);
//安全性
initialize(string).
(rec(k).(do Work(string).k+finalize(string)));
}
这个例子要与上述实现相比较。一致问题-实现是否符合类型描述-没有在这篇论文中解决,但是有希望的是,具有代码的安全性的简短比较将提供关于其如何被完成的至少某些建议。
例2.2.2这个例子示出购买者、供应商和发货者之间非常简单的三方合约。已经包括了足够的服务水平组成信息,以提供有关端口在何处被结合以及什么对核查有意义的上下文。然而,这篇论文的主要焦点是端口安全性。因此,服务水平组成句法未被解释。
购买者将启动购买,从而提供购买次序,并期望提前发货通知。它想要接收发票并提供货物接收确认。供应商等待购买次序,然后提供发票。发货者提供ASN并等待货物接收确认。
portType Purchaser{
initiatePurchase(PO,~AS);
confirmPurchase(~Invoice,Goods);
//安全性
rec(k).(initiatePurchase.confirmPurchase.k);
}
portType Supplier{
receivePO(~PO);
sendInvoice(Invoice);
rec(k).(reeeivePO.sendInvoice.k);
}
portType Shipper{
notifyOfShipment(ASN);
confirmReceipt(~Goods);
rec(k).(notifyOfShipment.confirmReceipt.k);
}
Service SCM Purchaser_Supplier_Shipper{
new(pC:Purchaser,pS:Supplier,pH:Shipper){
parallel{
SCM_Purchaser_Supplier(pC,pS)
SCM_Shipper(pH);
fuse(pC,pH);
}
}
}
Service SCM_Purchaser_Supplier(pC:Purchaser,pS:Supplier){
parallel{
SCM_Purchaser(pC);
SCM_Supplier(pS);
fuse(pC,pS);
}
}
Service SCM_Purchaser(pC:Purchaser);
Service SCM_Supplier(pS:Supplier);
Service SCM_Shipper(pH:Shipper);
2.3类型核查算法。有两种形式的类型核查要做。一种核查给定服务实现与被广告(或需要)的端口类型集合的依从性。这不能在这里被指定,这是由于缺乏实现语言的选择。另一种核查,给定两个端口类型,将一个端口“绑定”到另一个端口是安全的。
注解2.3.1这个算法是消息类型中的参变量。切除或匹配的概念必须可在类型系统中定义。
该算法可被以方程形式给出。递归地定义S1:=:S2,如下:
(0:=:S)=S
(M0.S0:=:M1.S1)=
(M.S:=:S0|S1)=(((S0/M)|S1):=:S)+((S0|S1/M)):=:S)
((S0+S1):=:S)=(S0:=:S)+(S1:=:S)
((S0|S1):=:(S2|S3))=S0,2,3,1&S1,2,3,0&S2,0,1,3&S3,0,1,2
(rec(k).S0:=:S)=S0{rec(k).S0/k}:=:S
其中
以及
(0/M)=未定义
(S0+S1)/M)=(S0/M)+(S1/M)
((S0|S1)/M)=((S0/M)|S1)+(S0|(S1/M))
(rec(k).S/M)=S{rec(k).S/k}/M
注解2.3.2在假定消息类型是原子的情况下,可给出match和cut的简单解释。因此,将会得到
cut(M0,M1)=ε
然而,若在购买者-供应商-发货者示例中,match被定义为将消息元素与共同类型的元素进行匹配,而cut移除这些对,则可以看到,购买者安全性的动作是实际的联合。即,购买者在安全性中前进之前实际等待PO被消耗以及ASN被供给。
定义2.3.3设端口p0具有安全性S0类型,同样的,p1具有安全性S1类型,且S=(S0:=:S1)。若S=0,则认为将p0和p1结合是安全的。否则,S就是将p0和p1结合不安全的原因。
关于这个定义的论证就是这样的。
定理2.3.4若(S0:=:S1)≠0,则S0提供不与S1匹配的输入/输出动作。