XLANG-s 语言
XLANG/s 旨在使用 XML、XSD 和 Web 服务描述语言等 Internet 标准 (WSDL) ,并嵌入了对使用 的支持。基于 NET 的对象和消息。 XLANG/s 可以被视为具有 C# 的一些表达式功能的消息传送语言。 但是,代码在 XLANG/s 和 C# 之间不可移植。
XLANG/s 鼓励在流程与实现之间明确分离。 例如,业务流程或协议在 XLANG/s 中指定,应用程序的本地方面(如数据库访问)使用其他 .NET 编程语言(如 C# 或 Visual Basic.NET)实现。
XLANG/s 赋值和表达式语法是按照 C# 建模的,应引用 C# 规范来获取确切的语法。 XLANG/s 定义一组用于定义业务流程的丰富高级构造。 虽然 XLANG/s 支持低级别数据类型(如字符串和整数),但高级数据类型也进行了定义:消息、端口、关联和服务链接。 这些数据类型用于严格定义与业务流程关联的语义,并通过流程控制语句(如 while 或 scope)进行补充。
XLANG/s 语句通常分为以下两类之一:单独操作的简单语句(例如 接收 或 发送)和包含或分组简单语句或其他复杂语句(如 范围、 并行和 侦听)的复杂语句。 XLANG/s 中体现的语义反映了 Microsoft、IBM 和 BEA 发布的用于定义业务流程语义的 Web 服务业务流程执行语言 (BPEL4WS) 规范中定义的语义。
了解 XLANG/s 的main构造是可选的,因为它们是在 BizTalk 业务流程Designer中绘制业务流程关系图的结果生成的。 业务流程Designer是一种丰富的图形工具,用于直观地设计业务流程。 它生成扩展名为 .odx 的 XLANG/s 文件,并在其标头中包含其他视觉信息,并在其正文中包含自定义属性信息。
注意
XLANG/s 语言是专有语言,未完整记录。 本部分介绍开发业务流程时可能需要注意的语言的某些部分。 不支持直接修改 .odx 文件。
XLANG/s 程序
最简单的 XLANG/s 程序需要定义消息类型,这为业务流程提供了一些数据以开始使用。 业务流程通过端口接收消息,然后终止。 下面的代码是一个示例:
module HelloWorldApp
{
private porttype ptPOReceive
{
oneway opPOReceive
{
HelloWorldApp.PurchaseOrder
}
}
private porttype ptPOSend
{
oneway opPOSend
{
HelloWorldApp.PurchaseOrder
}
}
private service HelloWorld
{
port implements HelloWorldApp.ptPOReceive poPOReceive;
port uses HelloWorldApp.ptPOSend poPOSend;
message HelloWorldApp.PurchaseOrder msgPO;
body ()
{
activate receive (poPOReceive.opPOReceive, msgPO);
send (poPOSend.opPOSend, msgPO);
}
}
}
在前面的 XLANG/s 程序中,module
关键字 (keyword) 定义 XLANG/s 程序的编译单位。 程序中使用的所有类型(例如 porttype、 correlationsettype、 servicelinktype 和 messagetype)都在此级别限定。
端口是 XLANG/s 可以向或从中发送或接收消息的构造,端口具有一个名为 porttype 的定义类型。 porttype 构造定义可在端口上使用的操作集合。 这些操作定义通过端口进行的单个有效消息交换。 在定义 porttype、 messagetype、 servicelinktype 或 correlationsettype 构造时,XLANG/s 程序的作者实质上是创建复杂的数据类型定义。 这些定义具有与复杂数据类型在其他语言中相同的优势:它们将数据类型中体现的概念抽象化到更高级别,并且可以轻松重用数据类型。
上述 HelloWorldApp 模块中的 ptPOReceive 端口是使用单向接收端口操作 opPOReceive 定义的。 服务 HelloWorld 块定义进程及其可能使用的任何变量(包括端口和消息变量)的实际实现。 此块中的前三行代码分别定义端口变量 poPOReceive 和 poPOSend 以及消息 msgPO 。 正文包含描述服务参数和执行行为的代码。 所有变量(除非使用嵌套范围块定义)都限定在此级别。 receive 语句(即激活接收)从 poPOReceive.opPOReceive 端口接收 msgPO 消息,并创建业务流程的新实例。 收到消息后,send 语句会将消息定向到发送端口。 在上述代码的两个端口声明中, poPOReceive 使用实现修饰符,而 poPOSend 使用 using 修饰符。 实现修饰符告知运行时,它将通过该端口接收消息。 使用修饰符告知运行时,它将通过该端口发送消息。