具体实施模式
本发明的原理涉及使用相应的字节流发送结构化数据的机制。当访问诸如简单对象访问协议(SOAP)包封的结构化数据时,就生成字节流。所述字节流包括代表结构化数据的字节,以及代表诸如像是通信模式的字节流相关属性的字节集。随后将该字节流送给能够接收并发送该字节流的通信模块(例如,TCP或者命名管道模块)。在接收侧能够以相反的模式恢复该结构化数据。因为该结构化数据被转换成字节流,所以使用任何通信模块(例如,TCP或者命名管道模块)发送该结构化数据而不是仅仅依靠HTTP。
现在转到附图,其中相同的编号指示相同的单元,将示出在合适的计算环境中实现的本发明原理。随后的描述基于本发明示意性的实施例,并且考虑到未在这里详尽描述的可选实施例,这里的描述就不应该作为对本发明的限制。
在如下的描述中除非另加指示,将参考由一个或更多计算机执行的操作的动作和符号表示来描述本发明的实施例。这样就可以理解,这些有时被称为计算机执行的动作和操作包括由计算机处理单元对以结构化形式表示数据的电信号的处理。以本领域技术人员熟知的方式重新构造或者以另外方式改变计算机操作的该处理,变换所述数据或者在计算机存储器系统的存储单元处保持这些数据。其中保持有数据的数据结构是具有由该数据格式定义的特定属性的存储器物理存储单元。虽然将在下文中描述本发明原理,但这并不意味着限制本领域技术人员能够意识到此后描述的动作和操作也可在硬件内实现。
图1示出了这些设备可使用的计算机结构实例示意图。出于描述性的目的,所描绘的结构仅仅是适当环境的一个实例,而不是想要对本发明使用和功能范围提出任何限制。同样也不应该认为所述计算系统需要依赖或要求图1中示出组件的任何一个或其组合来进行说明。
本发明的原理也可以在众多其他的通用或专用计算或通信的环境或结构中运用。适于使用本发明的已知计算系统、环境和结构包括但不限于:移动电话、便携计算机、个人计算机、服务器、微处理器系统、基于微处理器的系统、小型计算机、大型计算机和包括上述任何系统或设备的分布式计算环境。
在它最基本的结构中,计算系统100通常包括至少一个处理单元102和存储器104。存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等等)或者两者的某种组合。这种最基本的结构由图1中的虚线框106示出。
存储媒介还可具有附加特征和功能。例如,它们可以包括附加存储装置(可移动或不可移动),这些装置包括但不限于PCMCIA卡、磁盘或光盘和磁带。这些附加存储装置由图1中可移动存储装置108和不可移动存储装置110示出。计算机存储媒介可以是以任何信息存储方法和技术实现的易失性的和不易失性的、可移动和不可移动的媒介,诸如计算机可读指令、数据结构、程序模块或者其他数据。系统存储器104、可移动存储装置108以及不可移动存储装置110都是计算机存储媒介的实例。计算机存储媒介包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字通用盘(DVD)或者其他光学存储器、磁盒、磁带、磁盘存储器或者其他磁性存储设备或者能够存储期望信息并可由计算设备100访问的任何其他介质。
作为在此使用的术语“模块”或“组件”可认为是在计算系统上执行的软件对象或例程。在此描述的不同的组件、模块、引擎或服务可以作为在计算系统上执行的对象或进程(例如作为分离的线程)得以实现。虽然在此描述的系统和方法更适合以软件实现,但是以软件和硬件的实现或者以硬件实现也是可行的并且是可预期的。
计算系统100还可以包括允许主机经由例如网络120与其他系统或设备进行通信的通信信道112。虽然网络120可以包括任何网络类型(无论是现存的还是将来研发的),这里的实例包括令牌环网、以太网、蓝牙、802.11、USB、1394、SMS、SOAP over IP等等。通信信道112是通信媒介的实例。通信媒介通常具体体现为计算机可读指令、数据结构、程序模块或者在诸如载波或其他传送机制的已调制数据信号中的其他数据,并且所述通信媒介还包括任何信息传输媒介。作为例子而非限制,通信媒介包括诸如有线网络或者直接线连接的有线媒介,以及诸如声学、RF、红外线或其他无线媒介的无线媒介。这里使用的术语计算机可读媒介包括存储媒介和通信媒介两者。
计算设备100可以具有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等等的输入组件114。输出组件116包括显示器、扬声器、打印机等等,以及驱动它们的呈现组件(通常称为“适配器”)。计算系统100具有电源118。所有这些设备都在本领域内为人周知,因此无需在此详细讨论。
图2示出了可在其中运用本发明原理的环境200。网络环境可包括任意数量的计算系统。但是为了阐述的清楚,示出了第一计算系统210和第二计算系统220。所述第一计算系统210和第二计算系统是互相通信地可耦合的。当两个计算系统具有相互通信地耦合的能力时,它们就是“通信可耦合的”。在本说明书和权利要求中,如果两个计算系统中的一个与另一个进行通信,那么它们就是“通信可耦合的”。两个计算系统210和220甚至可以集成在相同的计算系统或设备内,但仍使用本发明原理进行通信。例如,一个计算系统可代表一种存储机制,而另一个则使用本发明原理发送和接收来自存储机制的信息。
根据本发明的原理,绑定模块212访问结构化数据211并且用于将管理结构化数据211的结构的结构化数据协议与提供字节流的字节流协议绑定。字节流通信模块214由术语“字节流”修饰以强调该通信模块依据字节流协议提供字节流用于和其他计算系统地通信。在本说明书和权利要求中,“字节流”被定义为字段序列。在某些情况下,将无法得知先验(priori)字节流长度。在其他情况下,该长度可以得知和/或是固定大小。所有这些情况都落入在此使用的“字节流”定义之内。
在一个实施例中,结构化数据211可以是分层结构化文档,诸如像是可扩展标记语言(XML)文档。在一个特定的实施例中,所述XML文档可以是简单对象访问协议(SOAP)文档。适当字节流协议的实例包括例如,传输控制协议和命名管道。绑定模块212通过把结构化数据211转换成字节流213完成与字节流协议的绑定,并且随后把所述字节流213提供给字节流通信模块214。然后字节流通信模块214将由箭头215代表的数据发送给第二计算系统220。在第二计算系统220内的类似字节流通信模块224接收所述数据,并将该数据作为字节流223提供给绑定模块222。该绑定模块222接收结构化数据221。
现已广泛描述了本发明原理,随后将参考图3和图4更详细地讨论特定实施例的操作。图3示出了用于发送结构化数据的方法300的流程图,该方法首先把结构化数据转换成包括了结构化数据表示以及代表了关于该结构化数据的属性信息的表示的字节流。当发送结构化数据211至第二计算系统220时,可由绑定模块212执行所述方法300。
绑定模块212访问结构化数据用于将其发送至第二计算系统(动作301)。通过例如接收来自其他组件或计算系统的结构化数据一些或全部和/或通过生成结构化数据的一些或全部,绑定模块212可以访问该结构化数据。如前所述,结构化文档的实例包括XML文档和SOAP包封。随后列举一个期望发送至第二计算系统220的SOAP包封的实例(使用SOAP版本1.2表述,但本发明原理不限于此版本)。
<S:Envelope xmlns:S=’http://www.w3.org/2003/05/soap-envelope’>
<S:Body/>
</S:Envelope>
这三行SOAP包封只是一个简单的实例并将作为贯穿本说明书的实例用于进一步阐明本发明实施例操作的目的。
在访问结构化数据211(动作301)之后,绑定模块212把结构化数据211转换成包括了集体代表一个或更多字节流属性的第一多字节以及集体代表所述结构化数据的第二多字节。图5示意性地示出了代表字节流213实例的适当字节流500。
参见图5,字节流500包括可能在由水平省略符代表的其他结构化数据成分520B其中的结构化数据成分520A。指定图5中的字节流500内的起始信息为最右边的字段,左边则跟随着连续的信息。每个结构化数据成分520A和520B都包括相应的结构化数据。例如,结构化数据成分520A包括相应的结构化数据522A的字节流表示。如上所述,结构化数据522A可以是,例如SOAP包封。每个结构化数据成分520A和520B也可任选地包括标识结构化数据字节流表示的长度的长度分量。例如,长度成分521A标识结构化数据522A的字节流表示长度。如果字节流长度已知(例如是接收方已知的固定大小),那么长度字段成为可任选字段。也可使用一些其他的机制来协商该长度。此外,每个结构化数据成分520A和520B也可任选地包括其他信息。例如,结构化数据成分520A包括其他字段523A。
字节流内具有长度字段512A带来了诸多优点。首先,可简单跳过畸变的结构化数据成分,而不是关闭连接。关闭连接耗费代价是因为连接的重开会占用时间、处理资源和存储器资源。此外,在连接关闭期间本应接收的某些消息就可能丢失。第二,在调用处理消息的应用编码之前就可将全部的结构化数据读入存储器。这就允许该应用无需等待消息的其余部分成为可用,就可完全访问该消息并且进行完整处理。
字节流500还包括在总体上定义了字节流500属性的流属性510。也可认为这些属性是字节流500的属性记录。已示出这些属性记录的实例。虽然未示出,但是结构化数据可以在每个属性字段间交织以重置流属性。
首先示出的是定义了字节流500的成帧版本的版本记录511。随后接收计算系统将此版本与管理如何解释后续属性记录和/或如何恢复结构化数据的一组规则相关联。例如,所述版本信息可以把一列可接受属性记录列表与它们对应的意义相关。
接下来示出的是定义了通信模式的通信模式记录512。以下将结合图6A至图6C详细描述相关通信模式。简言之,通信模式允许在指定消息交换模式下的灵活性和可靠性。具有模式记录512就可允许单网络地址(例如,单TCP端口号)以不同的模式接收消息。因为TCP端口对于给定机器而言是有限资源,使用这些端口号多少有些浪费。
通路记录513定义了数据流500的目标目的地。绑定模块可驻留在通信协议堆栈内,位于所述协议堆栈的上层内的该绑定模块将结构化数据211(或在结构化数据211内代表的信息)发送至另一个目的地。这样做就使得该信息的最终目的地与用在通路记录513中的由地址所表示的计算系统相比与通信路径更为一致。尽管如此,通路记录512代表了下一个绑定模块级的目的地地址。在无需花费完全解析字节流500所需的和访问结构化数据522A所需的处理资源的情况下,通路记录513通过接收系统允许某些级别的调度。通路记录513的值可以缺省预置成前一通路的值,从而减小了字节流的大小。
编码字段514可以为任何包含的结构化数据成分522定义一编码格式。这就允许系统在一个连接上支持多于一种的编码,这就减小了所需的连接数。还允许使用单地址(例如,单TCP端口号)用于不同的编码。如上所述,使用TCP端口号是昂贵的。对内容类型的已知的和可扩展的值同时支持就使得在不牺牲普通值的线尺寸下允许可扩展性。例如,可以用单字节编码已知的内容类型,但是通过指示对应于MIME媒介类型的串值,但附加的内容类型是可能的(但更为冗长)。
更新字段515指示是否要求安全更新或者该安全更新是否被响应。一旦两个计算系统完成了安全更新请求并跟随着返回肯定响应,那么这两个计算系统可以使用安全组件(例如安全套件层)用于进一步协商安全。所述更新字段515无需用于进一步的协商,但是至少需用于请求安全更新并且确认该安全更新是可能的,使得后续协商能够完善所述安全更新。当使用更新字段515时,就无需任何结构化数据成分520。由于为通信安全而不要求分开的连接,所以该更新机制是有效的。此外,更新字段515可以也用于其他的诸如像协商压缩和/或加密的完整流变换。
在例如前一数据流没有良好形成或者在其他不能被响应的情况下,故障字段516允许用于任何故障信息的通信。也是在此情况下,在使用故障字段515时,不需要任何结构化数据成分520。
其他字段517代表了可能的属性记录的列表是可扩展的。例如,其他字段517可以包括要协商关于流的诸如像是压缩或加密等等的其他信息。
随后将示出将三行SOAP包封实例转换为相应字节流的指定实例。在该指定实例中,附加的文本被添加到每一行用来辅助读者理解每行中阐述的相应字节流成分。每行的最左边是两个在圆括号内的数字,这两个数字代表行号。在该实例中行号是从01到24。紧接在行号的结束圆括号之后的是一个或更多的两位十六进制数的簇,其中每一位代表一个字节。每行的结束是由双正斜杠“//”作为开始的可人工读取的注释。当然所述字节流是一组字节串,并非组织成行的形式。下述示例使用逻辑分界人为地安排成行以便于读者阅读。
(01)00 //版本记录
(02)01 //主版本是1
(03)01 //次版本是1
(04)01 //模式记录
(05)03 //模式是3(单向)
(06)02 //通路记录
(07)0f //长度信息(记录是23字节)
(08)68 74 74 70 3a 2f 2f 65 //UTF-8用于“http://e”
(09)78 61 6d 70 6c 65 2e 6f //UTF-8用于“xample.o”
(10)72 67 2f 64 65 73 74 //UTF-8用于“rg/dest”
(11)03 //已知编码记录
(12)03 //SOAP 1.2,UTF-8
(13)06 //确定尺寸的包封记录
(14)54 //长度信息(记录是84字节)
(15)3c 53 3a 45 6e 76 65 6c //UTF-8用于“<S:Envel”
(16)6f 70 65 20 78 6d 6c 6e //UTF-8用于“ope xmln
(17)73 3a 53 3d 27 68 74 74 //UTF-8用于“s:S=′htt
(18)70 3a 2f 2f 77 77 77 2e //UTF-8用于“p://www.
(19)77 33 2e 6f 72 67 2f 32 //UTF-8用于“w3.org/2
(20)30 30 33 2f 30 35 2f 73 //UTF-8用于“003/05/s
(21)6f 61 70 2d 65 6e 76 65 //UTF-8用于“oap-enve
(22)6c 6f 70 65 27 3e 3c 53 //UTF-8用于“lope′><S
(23)3a 42 6f 64 79 2f 3e 3c //UTF-8用于“:Body/><
(24)2f 53 3a 45 6e 76 65 6c //UTF-8用于“/S:Envel
(24)6f 70 65 3e //UTF-8用于“ope>
第一行(即行01)含有字节00。每个记录包含的字节可以多于一个。在此实例中,每个记录的第一字节标识记录的类型。在此情况下的00指示该记录是版本记录。第二和第三行都包括一个字节,其中第二行标识主版本而第三行标识次版本。行01到03共同代表了图5中版本记录511的实例。
行04包括一个代表了用于下一个记录的记录类型标识符的字节。在此字节01代表了通信模式记录。行05包括表示值为3的一个字节,其中3代表运行模式是单向。通信模式的其他实例包括多向、双向或单路(singleton)。这些通信模式中的每种模式的意义都将参考图6A到6C进行讨论。可以通过添加更多的成帧版本以及通过恰当标识版本记录中的版本来扩展通信模式的数目。行04和05共同代表了图5中模式记录512的实例。
行06包括了指示通路记录开始的记录类型标识符字节02。行07标识通路记录的长度,在此例中为23字节。行08到行10包括了代表23个UTF-8字符的23个字节,它们定义了目的地地址“http://example.org/dest”。行06至行10共同代表了图5的通路记录513的实例。
行11包括了指示编码记录开始的记录类型标识符字节03。行12包括表示值为3的一个字节,其中3对应于此实例中的UTF-8和SOAP版本1.2。行11至行12共同代表了图5的编码记录514的实例。
行13包括了指示确定尺寸包封记录的记录类型标识符字节03。确定尺寸包封记录包括所述SOAP包封的尺寸标识以及所述SOAP包封本身。特别地,行14标识所述SOAP包封的长度为75字节(或者也可以是75个字符,因为使用一个字节代表UTF-8中的每个字节。行15至行24代表了在前述实例中示出的用于三行SOAP包封的UTF-8。因此,行15到行24一起代表了图5的结构化数据522A的字节流表示。行14代表了的图5的长度字段521A。这样,行13到行24一起代表了图5的结构化数据520A。
可以使用其他属性记录来表达安全更新请求或响应,表达故障或其他信息。
因为字节流500现在是字节流,所以它可被提供给任何需要字节流供应的通信模块,诸如用户数据报协议(UDP),微软消息队列(MSMQ)、TCP或命名管道。因此参见图3,在生成字节流之后,所述绑定模块随后将字节流213传输至接收字节流来与其他计算系统通信的字节流通信模块214(动作303)。
可以使用其他属性记录来表达安全更新请求或响应,表达故障或其他信息。
图4示出了使用首先接收代表了结构化数据以及该字节流属性的字节流以接收结构化数据的方法400的流程图。方法400可在第二计算系统220处由绑定模块222执行,或者另外可以在接收消息时在第一计算系统210处由绑定模块212执行。在任一情况下,一接收到消息,字节流通信模块224(或214)就提供字节流给相应的绑定模块222(或212)。
随后绑定模块接收字节流(动作401)、绑定模块可使用属性记录标识版本信息、通信模式等等。接收绑定模块使用与用于构造字节流的发送绑定模块使用相同的成帧规则解释字节流。因此,接收绑定模块随后可从字节流中恢复结构化数据(动作402)。所述发送和接收过程可以频繁重复。
因此,本发明的原理描述了使用提供字节流的通信模块(诸如TCP)用于通信结构信息(诸如SOAP包封)的灵活机制。与这些通信模块接口的能力意味着可以利用这些通信模块的灵活性为消息交换模式和可靠性带来更宽的选择范围。TCP不限于单请求-单响应消息模式。也可以使用更多的消息模式来克服像SOAP-over-HTTP最严重的固有弱点之一。此外,该机制允许与成帧协议集成的便捷安全更新。
通信模式也可改变。在一个实施例中,通过将通信模块信息包含在如图5所示的字节流500的流属性510的模式字段512中来执行这种改变。图6A至图6C示出了由通信模式记录设置的各种通信模式的若干实例。在每幅图中,组件610代表在第一计算系统上的单连接(例如TCP或者命名管道连接),而组件620代表在第二计算系统上的单连接(例如TCP或者命名管道连接)。
图6A示出了多向模式。在此模式下,单连接610A发送数据给单连接620A。在相应于绑定模块的绑定层处,即使使用单连接接收各种消息,各种这些消息也可被路由至不同的端点。例如在一个实例中假定与一个统一资源标识符(URI)和TCP端口(例如与连接610A相关联的)相关联的用户想要与由另一个URI和TCP端口代表的在线书店相接口。那个单TCP端口可以提供多种不同的服务。例如,可能一项服务是提供书店的目录信息,而另一项服务是提供图书购买。并不需要为每项请求使用不同的连接。而是发送恰当请求611A给连接620A用于对目录服务的恰当路由选择612A至614A,并且同样的连接还会在随后的图书购买中使用。在图5的实施例中,可以使用在通路记录513内的信息完成该路由选择。
图6B示出了单向模式,其中第一计算系统使用单连接610B可靠发送消息611B给位于第二计算系统处的单连接620B。也可在图5的实施例的模式记录512中标识该单向模式。为确保可靠性,会返回由箭头612B代表的确认消息或信息包。连接620B把字节流613提供给协议堆栈的其他层。在此模式下,在TCP和命名管道的情况下在连接之间不存在中间绑定级模块。尽管如此,还要进一步确保可靠性。提供该可靠性的确认消息可以位于例如,结构数据本身(例如图5的结构化数据522A)或者通过某些其他的机制。
图6C示出了双向模式,其中第一计算系统使用单连接610C以可靠发送消息611C给位于第二计算系统处的单连接620C。也可在图5的实施例的模式记录512中标识该双向模式。可用相关的确认消息612C以提高可靠性,并且连接620C提供613C相应的字节流给协议堆栈内的其他层。同样在相反方向上,第二计算系统使用单连接620C可靠发送消息621C给位于第一计算系统上相同的连接610C。可用相关联的确认消息622C提高可靠性,并且连接610C提供623C相应的字节流的给协议堆栈内的其他层。
虽未示出,但是还可使用图5实施例的模式字段512来选择“单向”。该单向使用单连接用于发送不限大小的字节流给第二计算系统。
在不背离本发明精神或本质特征的情况下,本发明还可以具体表达为其他的特定形式。应认为所述实施例是示意性而非限制性地。因此本发明的范围不是由前述说明书而是由所附权利要求所指示的。在与权利要求等效意义和范围内的所有改变都被认为在本发明的范围之内。