BPEL在面向服务体系结构(SOA)的大背景下定义。它的前提条件之一是涉及的服务必须用WSDL声明。BPEL规定了一套XML语法,这套语法可以看作一种编程语言,用来描述包括对WSDL定义的服务调用的控制流。
BPEL定义通常需要另外两个文档类型——WSDL和XML架构。BPEL扩展了WSDL以便以抽象方式提供和使用Web服务。这样可以发挥WSDL的重要长处之一,即能够将合成时所需的抽象消息和端口信息与调用时所需的物理绑定和地址详细信息分离。
WSDL中的XML语义:
1. Types指定在后面的Message中需要的类型。
2. Message可以理解为函数中的参数,只不过如果一个函数如果有多个参数的时候应该把这些参数定义到一个Message中而不能定义为多个Message。
3. ProtTypes就是一个服务接口,定制在你的服务中应该包含哪些操作。
4. Operations指的是操作,也就是对应每个接口中的函数名称,每一个Operations都可以有input,output,fault等,这些参数能够来自于Message。
5. Bindings定义通讯方式,每一个PortType对应一个Binding,然后在Binding中进一步细化设置每一个操作,进而每一个input,output,fault的传出方式,编码方式等。
6. Service就是将binding与对应的地址相关联,这样就知道什么地址上的服务能够做哪些事了。
BPEL是构建在Webservice上的一层,在BPEL的定义中同样使用了WSDL的描述,但是BPEL将Binding,Service与WSDL的其它部分分离,这个部分WSDL是支持的,由此做到灵活的绑定配置。在传统WSDL(Types, Message,PortType)类型之外,BPEL的额外定义的XML元素:
<partnerLinkType>
<partnerLinkType>定义的是服务之间的依赖关系。PortType其实可以理解为服务接口,每一个PortType对应一个Service。只不过,在这里具体服务的实现的部署还没有真正的开始。每一个<partnerLinkType>至多有两个<Role>,每一个<Role>对应一个且必须对应一个PortType,这里的Role和业务过程有关,代表一个动作的执行过程,如果在双方的整个交互过程中只需要一方则只定义一条<Role>就可以了,也就是说业务流程的某一个环节,在接受请求以后,并不需要把服务结果返回发送者,而是顺次提交给下一个业务流程,在这个过程中,发起者和接受者之间只需要一条规则保证,并且只有发起方规则保证。最多有两个也很好理解,在一次交互的过程中,至多只能有两方参与。
BPEL和WSDL某些元素的对应关系如下图所示:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 332.25pt; HEIGHT: 201pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>