具体实施例
本发明扩展到用于带有使用一组标准接口其中一个的可插入模块信道组件的运行库通信信道的方法、系统和计算机程序产品。本发明的实施例可包含专用或通用的计算机,包括各种计算机硬件,如以下更为详细地讨论。
一般地,本发明提供能够生成带有可插入模块信道组件的运行库通信信道的信道模型。这些信道组件实现一组标准接口其中一个,这些标准接口允许处理要以多态方式表示的组件或模块之间的通信语义的细节。图1A说明在面向服务的系统中,这种示例性的通信信道的特定实例。
在分布式系统100中,客户机或代理(proxy)105希望访问由服务160提供的服务,并向服务160发送消息110,用于处理。广泛地说,服务160是端点155的集合,且端点155表示在能发送并接受某些类型的消息的位置处的一段代码,。为了访问这些服务,客户机主动向信道工厂130请求信道。信道工厂130提供用于创建到服务160的端点155的信道的机制。信道,例如,运行库通信信道120,表示用于在客户机105和服务160之间交换消息的核心抽象。正如下面将要更为详细讨论的,运行库通信信道120在使用一组标准接口其中一个的各种信道组件125和模块之间通信,由此从分布式系统中的其他组件125和模块中(注意,这里术语“组件”和“模块”可交换使用)抽象每个信道组件125中的特定的实现细节。
信道工厂130创建运行库通信信道120并把句柄140(它可能是运行库通信信道165或其标识符)返回给客户机105。客户机105然后可使用运行库通信信道,以根据一般由服务开发者导出的特定的通信语义(注意,然而,该通信语义也可以是缺省值或由服务侧的系统管理员覆盖的值),向服务160传递消息110。示例性的实施例提供根据各种通信语义,例如它们实现的消息交换模式(MEP)所类型化或创建的信道120、125。消息交换模式表示一种用于客户机105和服务160、或各种情况可能有的其他服务端点之间的消息通信的模式。当前实施例支持多个原语消息交换模式,包括但不限于单向(例如,输出信道和输入信道)、请求-应答(请求信道和应答信道)、以及双工消息传递(双工信道)。注意,这些MEP是完全可扩展的。因此,上述MEP的子集或派生可根据需要来实现。此外,如下面将要更为详细描述的,这些MEP的每一个都是会话性质的。
其他的例子实施例提供了可根据其他通信语义,如可靠性(例如,WS-ReliableMessaging、HTTPR等等)、安全性(例如,WS-Security、HTTPS、签名类型、编码类型等等)、该信道是否支持单播或多播、是否支持会话、交易支持、排队、公布并订阅、编码机制(例如SOAP封装、二进制、文本等等)、以及使用哪种传输用于和服务交换消息(例如,HTTP(超文本传输协议)、FTP(文件传递协议)、SMTP(简单消息传递协议)、TCP(传输控制协议)、UDP(用户数据报协议)、THE SPECIFICATION(短消息服务)、SNA(系统网络结构)、GPRS(通用分组无线服务)等等)来类型化和创建包括单独信道组件125的运行库通信信道120。
也要注意,有许多其他类型的通信语义可用于类型化运行库通信信道120。因此,以上列表并不意味着是包括一切的,且对用于创建或类型化运行库通信信道120的通信语义的任何特定的参考只是用于说明性的目的,且并不意味着限制或缩小本发明的范围,除非明确声称。
不管如何类型化和创建运行库通信信道120,信道120表示输入/输出(I/O)抽象,且对以下行为负责:(1)接受应用数据或消息110(例如,SOAP消息);(2)实现各种通信语义(这里作为可靠性信道组件125、安全信道组件125和传输信道组件125示出);(3)根据信道组件125格式化消息110用于传输;以及(4)通过“电线”传递消息。
在服务侧160,听众工厂170在特定的网络地址上收听新消息如消息110,并提供用于创建与服务的特定端点155通信的听众145的机制。每个特定的听众145有唯一的消息过滤器150,以便从听众工厂170接收的与特定听众145的过滤器匹配的消息110被传递给该听众145。换言之,听众工厂170使用去复用器(demux)175对消息110的一部分去复用,并基于消息过滤器150向适当的听众145发送消息。
听众145表示在服务侧160上倾听并接受新的运行库通信信道120的抽象。当端点155就绪时,它会呼叫“接受信道”。当听众145检测到新的信道120时,对“接受信道”的呼叫完成,通知适当的端点155出现新的信道120。那么,可以用运行库通信信道120的相反方式使用服务通信信道147,以便在消息110上对通信语义去复用,以便端点155适当地处理消息110。换言之,消息110递归地穿过服务通信信道147的可插入模块信道组件,用于在运行库通信信道120处实现的通信语义的去复用。
注意,尽管创建了不同的通信信道,但会话通信信道可能与运行库通信信道120是相同的。换言之,听众145可使用相同的运行库通信信道120,只是以相反次序。因此,服务通信信道147应被广泛解释为包括运行库通信信道120。
其他例子实施例提供了上述消息交换模式能有无连接信道和面向连接信道(例如,会话信道)两者。一般地,会话是在消息交换模式中的所有参与者之间共享上下文。会话可有三个主要组件:(1)会话建立-用于建立所有参与者之间的共享上下文的进程;(2)消息相关-把一组消息和共享上下文的实例相关的方法;以及(3)会话终止-用于终止在所有参与者之间共享上下文的进程。注意,会话建立和会话终止都可以是显式或隐式。即,可以有显式会话建立(例如,以可靠性和TCP方式),或者会话建立可以是隐式(例如,使用相关ID)。示例性的实施例也提供直接会话(其中会话的寿命与信道120的生命期有关)和排队会话(其中这两个生命期是无关的)的会话信道。
对于无连接信道,示例性的实施例在客户机105呼叫或请求运行库通信信道120的次数和服务160做出呼叫或接受信道120的次数之间(其中,一般地,通过这些类型的信道120传递的所有消息被认为是数据报)不提供相关性。对于“直接”会话,在客户机呼叫或请求到服务160的信道135的次数和服务160呼叫“接受信道”的次数之间一般有一对一的对应。对于“排队”会话,涉及在各方之间有共享的单个会话。信道可附属于会话,或脱离会话,而不改变会话的状态。因此,在客户机105请求运行库通信信道120的次数和服务160接受信道120的次数之间没有对应。
示例性的实施例提供通信对象(例如,信道工厂130、听众工厂170、听众145和信道120)共享公共状态机器。图1C示出公共状态机器转换的例子,且该机器有三个主要的状态和三个中间状态。一般地,通信对象在创建192状态开始。在创建192状态,可配置对象、可出现事件注册等等。一旦用户完成配置对象,用户可使用Open()调用把该对象转换成打开196状态。这会导致对象为活动和可用的。注意,创建192状态和打开196状态中间有中间状态,它是对象在Open()调用开始和Open()调用完成之间的状态。因此,通信对象可被锁定,且可能对它起作用,但应该还不能接受I/O。
对象可以优美或不优美的方式终止使用。对象可通过从打开196状态呼叫Close()事件来优美地关闭,这会使对象从打开196状态转换成关闭198状态。或者,错误条件或外部刺激可导致对象不优美地异常中断。因此,如图1C所记录的,在任何主要状态,可做出Abort()调用,以把通信对象从当前状态转换成关闭198状态。注意,在处理数据之前会出现错误,且处理消息110期间的这些错误通过标准异常传播。还要注意,会话故障也可通过Abort()事件传播。
图1B说明根据例子实施例的运行库通信信道120的更为详细的模型。如所示,通信信道120内的每个对象使用标准接口180通信。标准接口180是把通信语义从一个模块165或组件185、190传递到另一个模块或组件的简单接口。此外,标准接口180是基于任何前述的消息交换模式选择的一组标准接口其中一个。各种信道组件185、190,或甚至是应用模块165,可执行通信语义的各部分。剩余的部分则可通过标准接口180传递给通信信道120内随后的信道组件185、190。
注意,各种信道组件185、190的任何一个可完成消息110上的通信语义。例如,如果信道组件是可靠性组件,且消息110是复制的,则该信道组件可通过简单丢弃消息110来完成通信语义。另一个例子可以是在使用显式会话创建的协议中的会话建立,其中存在在较低信道组件(例如,传输信道组件190)之间交换的消息110,而较高信道组件或模块(例如,信道组件185)永远不知道这些消息110。因此,消息110可以通过或可以不通过与运行库通信信道120交互的每个信道组件180、190或其他组件或模块(例如,应用模块165)传播。
例如,可在接收请求-应答和安全的通信语义的应用模块165处接收消息110。应用模块165能使用标准接口180,来通过各种信道组件185、190中继或代表(delegate)这些通信语义,其中每种信道组件是从其他组件185、190或模块165的特定实现细节中抽象出来的。例如,信道组件185可使用,例如WS-Security来实现安全性组件,而传输信道组件190可以是请求-应答传输,例如HTTP。因此,可由通信信道120内的不同信道组件185、190来执行通信语义,而其它组件185、190或模块165是从特定的实现细节中抽象出来的。
因为该层的抽象,所以以多态方式提供了执行特定的通信语义的组件185、190或模块165。因此,作为备选方案,应用模块165可通过标准接口180把相同的通信语义传递给单个信道组件(特别是传输信道组件190),该信道组件可使用,例如HTTPS来执行指示的通信语义。此外,任何数目的通信组件185可通过标准接口180通信,并提供整个通信语义的各个部分。其后,信道组件185、190(或模块,例如,应用模块165)能使剩余部分穿过标准接口180,并从通信语义如何成层的特定实现中抽象出来。
可以看到,每个信道组件185、190是完全可插入的,以便需要新的信道组件185、190或旧的信道组件不想要时,可向整个通信信道120简单插入这些信道组件,或从中拔出。而且,因为以多态方式表示该模型,则信道本身是可扩展的。例如,在以上给出的例子中,请求-应答通信语义可能已经由备选传输,例如TCP来满足,而不必打破该模型。因此,每个信道组件185是完全可扩展和可插入的,由此把通信信道120只与一种消息交换模式绑定。这种完全可扩展和可插入模型有若干优势特征。例如,随着新版本和新的通信语义变为是可用的,则它们可被插入到系统中,而不必打破或重写当前的通信信道120。
尽管如上所述,通信信道与MEP绑定,但消息交换模式本身也是可扩展、可插入的。因此,随着标识并开发新的消息交换模式,这些通信语义也能以与上述方式类似的方式建模或增加。注意,因为每个通信组件185、190是可扩展、可插入的,则本发明并不依赖于任何特定的通信语义,除了特定的消息交换模式。因此,所使用的对通信语义的任何特定的参考只是为了说明目的,且并不意味着限制或缩小本发明的范围,除非明确宣称。
也要注意,信道组件185的顺序是可交换的。例如,用于安全性的信道组件185可在用于可靠性的信道组件185之前发生。然而,这两个信道组件185的顺序可以互换,以便可靠性通信语义出现在安全性通信语义之前。因此,与其他刚性模型不同,当前通信信道是灵活、可升级、可插入且可扩展的。
尽管信道组件185的特定实现细节是从应用模块165中抽象的,但存在应用165需要知道是否支持特定的通信语义的时候。因此,本发明提供信道检查和控制,其中可询问通信信道120内的各种信道组件,以确定它们是否执行整个通信语义的一部分。然后,这个信息中继给应用模块165。注意,尽管应用模块165能确定可以满足通信语义,但它仍可以不知道特定的实现细节,如哪个信道组件185、190将执行通信语义以及如何执行。
注意,在某些消息交换模式,例如,(双工MEP)的事件中,会需要反向的运行库通信信道120。因此,其他例子实施例提供了在接收第一运行库通信信道120的基础上,类型化和/或创建运行库通信信道120。在此实施例中,一旦服务160从客户机105接收并接受运行库通信信道120,服务160和客户机105的角色就颠倒了。特别是,一旦从客户机105接收运行库通信信道,服务160可向信道工厂130请求135信道、接收句柄140、并根据从信道工厂130创建的运行库通信信道120处理应答消息。客户机105然后可根据上述例子实施例对应答消息去复用。
本发明的也可关于包含功能性步骤和/或非功能性动作的方法来描述。下面是在实施本发明中执行的步骤和/或动作的描述。通常,功能性的步骤按照完成结果来描述本发明,而非功能性动作描述用于实现特定结果的更为特定的动作。尽管功能性步骤和/或非功能性动作可用特定顺序描述或宣称,但本发明并不必限定于步骤和/或动作的任何特定顺序或组合。此外,步骤和/或动作在权利要求的叙述中的使用,以及下面对图2到图4的流程图的描述,被用于指示对这种术语的所希望的特定用法。
图2到图4说明用于本发明的各种示例性的实施例的例子流程图。下面对图2到图4的描述有时候参考来自图1A到图1C的相应元件。尽管会参考来自这些图的特定元件,但这些元件只是用于说明的目的,且并不意味着限制或缩小本发明的范围,除非明确宣称。
图2说明配置用于通过递归地使消息穿过运行库通信信道的可插入模块信道组件在端点之间传递的消息的方法200的例子流程图。每个可插入模块信道组件实现多个标准接口其中一个,这些标准接口允许处理要以多态方式表示的组件之间的通信语义的细节。
方法200包括接收动作205,它接收至少包括一种消息交换模式的通信语义。例如,运行库通信信道120中的第一信道组件185可接收包括输入、输出、请求、应答、双工、或用于前述任何一个的会话状态中的一个或多个的通信语义。其他通信语义也包括传输类型、编码类型、单播支持、多播支持、交易支持、安全性支持、保护支持、可靠消息传递保证、公布&订阅支持、以及排队支持。通过基于消息交换模式从多个标准接口中选择的标准接口接收这种通信语义。(注意,“多个”(意思是两个或更多),不是“集”(意思是所有可用的选项),用于下面流程图的描述和权利要求的描述。因此,本发明不要求所有标准接口都是可用于选择的)。
方法200也包括接收动作210,它通过标准接口接收作为消息交换模式的一部分的消息。例如,通信组件185可通过标准接口180接收消息110。其后,方法200也包括执行动作215,它对消息执行通信语义的至少一部分。例如,在上面的例子中,其中通信语义为请求-应答消息交换模式,且安全性(例如,WS-Security)信道组件185可对消息执行通信语义的安全性部分。
注意,标准接口180从与运行库通信信道交互的其他组件或模块中抽象实现细节,用于对消息执行通信语义的至少一部分。例如,从应用模块165、传输信道组件190、以及与运行库通信信道120交互的其他模块或组件中抽象第一信道组件185内的实现细节。
其后,消息110及其剩余的通信语义,如果有的话(或不像之前所述),可被发送到下一个适当的模块或组件,用于进一步处理。例如,通信组件185可通过标准接口180发送消息110和任何剩余的通信语义。这个过程可通过这种模块组件递归执行,直到所有通信语义都已实现,此时,可向服务发送消息110,用于对通信语义去复用。或者,如果第一信道组件185完成通信语义,则消息110将不会向与运行库通信信道120交互的其他信道组件190或模块165传递。
图3说明创建配置成对来自消息的通信语义去复用的服务通信信道的方法300的例子流程图。方法300包括接收动作305,它接收用于接受运行库通信信道的请求。因此,在服务160,听众工厂170或听众145可接受消息110。如果听众工厂170接收消息110,它可使用去复用器对该消息的一部分去复用,并生成适当的听众145。其后,带有适当消息过滤器150的听众可被发送到运行库通信信道120。
方法300也包括接受运行库通信信道的动作310。例如,当端点155就绪时,它会调用“接受信道”,且听众145检测到运行库通信信道120时,该调用可返回。运行库通信信道120与至少包括一种消息交换模式的通信语义对应。这种消息交换模式可以是任何前述的交换模式,或任何新的或其他熟知的消息交换模式。
其后,方法300也包括接收已经根据通信语义处理的消息的动作315。例如,听众145可接收已经根据如可靠性、安全性、以及请求-应答消息交换模式的通信语义处理的消息110。方法300还包括创建服务通信信道的动作320。例如,听众145一旦接收消息和通信语义如消息交换模式,就可创建用于根据该通信语义对消息去复用的服务通信信道147。其后,方法300包括传递动作325,它通过标准接口把通信语义和消息传递给服务通信信道内的第一信道组件,用于对消息110的至少一部分去复用。标准接口180是基于消息交换模式,从多个标准接口中选择的。此外,标准接口180从与服务通信信道120交互的其他组件或模块中抽象实现细节,用于对消息110的至少一部分的去复用。
可用与上述关于运行库通信信道120的方式类似的方式,代表消息和通信语义。然而,随后不是根据通信语义处理消息110,而是对该消息去复用,其中根据通信语义对消息的至少一部分消息去复用。其后,该消息被递归传递给其他模块和组件,用于进一步处理,(例如,该消息可被发送到端点155,用于处理消息并用输出应答)。
更为具体地,如图4所示,本发明提供一种通过递归地使消息穿过服务通信信道的可插入模块信道组件,处理用于在端点处消耗的消息的方法400。与方法300类似,方法400包括接收至少包括一种消息交换模式的通信语义的动作405。如上所述,通过基于消息交换模式从多个标准接口中选择的标准接口接收通信语义。方法400也包括通过标准接口接收作为消息交换模式一部分的消息的动作410。根据各种通信语义,如可靠性、安全性、以及用于消息交换模式的输出来处理消息110。
其后,方法400包括对有关消息的通信语义的至少一部分去复用的动作415。特别是,服务信道147内的信道组件可对消息进行通信语义的至少一部分,如可靠性部分的去复用。标准接口从与服务通信信道交互的其他组件或模块中抽象实现细节,用于对通信语义的至少一部分的去复用。
如前,消息和剩余的通信语义可以或可不被发送到其他信道组件或模块,例如,端点155,用于适当处理。这如前所述以信道组件是否完成了通信语义为条件的(例如,当消息110被丢弃,或只在较低组件之间通信时)。
本发明的范围内的实施例也包括计算机可读的介质,用于在其中携带或存储计算机可执行指令或数据结构。这种计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。仅仅作为例子,而非限制,这种计算机可读介质可包含RAM、ROM、EEPROM、CD-ROM或其他光盘存储器、磁盘存储器、或其他磁性存储设备、或可用于携带或存储以计算机可执行指令或数据结构形式,且可由通用或专用计算机访问的想要的程序代码手段的任何其他介质。当通过网络或另一个通信连接(硬线、无线、或硬线或无线的组合)向计算机传送或提供信息时,计算机适当观看作为计算机可读介质的连接。因此,任何这种连接被适当称为计算机可读介质。以上的组合也应包括在计算机可读介质的范围内。计算机可执行指令包括,例如,使通用计算机、专用计算机、或专用处理设备执行特定功能或一组功能的执行和数据。
图5和下面的讨论意图提供其中可以实现本发明的适合的计算环境的简要、一般描述。尽管并未要求,但本发明将在计算机可执行指令如由网络环境中的计算机执行的程序模块的一般上下文中描述。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。计算机可执行指令、相关联的数据结构、以及程序模块代表用于执行这里揭示的方法的步骤的程序代码手段的例子。这种可执行指令或相关联的数据结构的特定顺序代表用于实现以这些步骤描述的功能的相应动作的例子。
本领域的技术人员会认识到,本发明可在带有许多类型的计算机系统配置,包括个人计算机、手提设备、多处理器系统、基于微处理器或可编程的消费电子设备、网络PC、小型机、大型机等等的网络计算环境中实施。本发明也可在分布式计算机环境中实施,其中由通过通信网络链接(由硬线链接、无线链接、或者由硬线或无线链接的组合)的本地或远程处理设备执行任务。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备中。
参考图5,用于实现本发明的示例性的系统包括以常规计算机520形式的通用计算设备,包括处理单元521、系统存储器522、以及连接包括系统存储器522的各种系统组件到处理单元521的系统总线523。系统总线523可以是任何一种类型的总线接口,包括存储器总线或存储器控制器、外围总线、以及使用任何一种总线结构的本地总线。系统存储器包括只读存储器(ROM)524和随机存取存储器(RAM)525。基本输入/输出系统133(BIOS)一般存储在ROM524内,它包括如启动时帮助在计算机520内的元件间传输信息的基本例程。
计算机520也可包括用于从磁性硬盘539中读写的磁性硬盘驱动器527、用于从可移动磁盘529中读写的磁盘驱动器528、以及用于从可移动光盘531,如CD-ROM或其他光学介质中读写的光盘驱动器530。磁性硬盘驱动器527、磁盘驱动器528、以及光盘驱动器530可分别通过硬盘驱动接口532、磁盘驱动接口533、和光盘驱动器接口534连接到系统总线523。这些驱动器及其相关联的计算机可读介质为计算机520提供对计算机可执行指令、数据结构、程序模块和其他数据的非易失存储。尽管这里描述的示例性的环境使用磁性硬盘539、可移动磁盘529和可移动光盘531,但可以使用用于存储数据的其他类型的计算机可读介质,包括磁性磁带、闪存卡、数字多功能盘、柏努利(Bernoulli)磁带、RAM、ROM等等。
包含一个或多个程序模块的程序代码手段可存储在硬盘539、磁盘529、光盘531、ROM524或RAM525上,包括操作系统535、一个或多个应用模块536、其他程序模块537、以及程序数据538。用户可通过键盘540、定点设备542、或其他输入设备(未示出),如话筒、操作杆、游戏垫、圆盘式卫星天线、扫描仪等等向计算机520输入命令和信息。这些以及其他输入设备经常通过耦合到系统总线523的串行接口546连接到处理单元521。或者,输入设备可由其他接口,如并行接口、游戏口或通用串行总线(USB)连接。监视器547或另一个显示器设备也通过接口,如视频适配器548,连接到系统总线523。除了监视器外,个人计算机一般包括其他外围输出设备(未示出),如扬声器和打印机。
计算机520可以工作在使用到一个或多个诸如远程计算机549a和549b的远程计算机的逻辑连接的网络化环境中。远程计算机549a、549b每一个可以是另一台个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且一般包括与计算机520相关的许多或所有上述元件,尽管图5中仅说明了存储器存储设备550a和550b及其相关联的应用程序536a和536b。图5所示的逻辑连接包括局域网(LAN)551以及广域网(WAN)552,它们只是作为例子,而非限制。这种网络环境常见于办公室范围或企业范围的计算机网络、内联网以及因特网。
当用于LAN网络环境时,计算机520通过网络接口或适配器553连接到局域网551。当用于WAN网络环境时,计算机520一般包括调制解调器554、无线链接、或用于在诸如因特网的广域网552上建立通信的其他装置。调制解调器554,可能是内置或外置的,它通过用户输入接口546连接到系统总线523。在网络化环境内,所述与个人计算机520相关的程序模块,或其中的一部分可能存储在远程存储器存储设备中。应该认识到,所示的网络连接是示例性的,在计算机间建立通信的其他手段也可以使用。
本发明可以其他特定形式体现,而不会脱离其精神或必要特征的范围。所述的实施例应被认为在所有方面只是说明性的,而并非限定性的。因此,本发明的范围是由附加的权利要求而非前述描述所指示。落入权利要求等价物的意思和范围内的所有变化都包含在其范围内。