如果对开发的基于Web的应用称颂它是一个无状态的媒介, 是一个归结于在它的基本协议 HTTP的固有设计。然而 , 长期的研究表示多数在客户和服务器之间的互作用要求维护状态来正确的执行。WSRF是一个在Web环境中设计处理有状态资源的一个规范。
WSRF ,或者称为Web服务资源框架,提出了提供持久数据的方式。 一个从WSRF观点来看的资源可以被理解为任何的具有扩展的生命周期的设备或者应用程序模块,而不只是一个简单的请求或者响应。这种设备或者应用程序模块是通过Web services来提供的。
通常的,处理有状态数据的经典的做法就是在应用程序中让程序自己来处理有态数据。在本质上,应用程序请求方的信息的管理和状态是被提供者和visa versa.隐藏起来的。
在大多数情况下这种方法都是可以奏效的,但当在一个请求者或者提供者要求一个对于资源状态的完全快照时,精确描述的Web services 设计的局限提出了新的要求,而WSRF正是为了应对这个方面的问题而提出的。
WSRF作为一个框架,是由 一系列的处理细节的模块组成的。他们是:
* WS 资源:定义了Web services如何能够被用来表示多资源实例。
* WS-资源属性(WSRF-RP):指定了同WS 资源资源中定义的属性进行交互的实际方式。
* WS-资源生命周期(WSRF-RL):定义了如何来管理和销毁WS-资源的生命周期。
* WS-服务组(WSRF-SG):指定了如何来聚合WS-资源。
* WS-基本错误(WSRF-BF):定义了被WSRF服务抛出的SOAP格式的错误。
不考虑语义,大多数的实现都支持包括前面所说到的所有的子群的WSRF.已经介绍了所有的相关背景,是时候来详细说明这对于使用WSRF来提高Web services究竟意味着什么了。
一个以WSDL形式表述的Web service合约可能变得非常冗长的——更不用提复杂——特别是在那些能够更具用户和消费者的输入来改变状态的资源之间代理请求的时候。一个典型的情况就是一个跟踪系统或者购物车。
每个交互或者往返操作要求每个交换的合约要修改成包括类似的分块形式的状态改变。但是对于WSRF,这个途径就改变了。
WSRF定义了一个资源属性文本(Resource Property Document)——WSRF的骨干——实际上是一个XML文档,它完全的区分开了在一个WSDL合约中提供的服务描述。
这个过程允许Web服务能够把他们自己同改变状态的数据直接脱离开来,以一个单独的形式来有效的封装资源,而不是用扑面而来的WSDL描述符合总是通过线路为每一个调用不断的传输类似的信息。
一下的列表解释了一个被客户使用WSRF发送到一个Web 服务提供者的payload。
列表一。1.1 对WSRF使能的Web Service的请求
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ts="http://tracking-system.org/resource/package">
<Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
<wsa:To mustUnderstand="1">http://dataprovider.com/wsrf/services/packagesystem</wsa:To>
<wsa:Action mustUnderstand="1">http://tracking-system.org/resource/package/PackagesystemPortType/WsdlRequestName</wsa:Action>
<ts:ResourceIdentifier mustUnderstand="1">/standard/express</ts:ResourceIdentifier>
</Header>
<Body>
<wsrp:GetMultipleResourceProperties
xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"
xmlns:ts="http://tracking-system.org/resource/package">
<wsrp:ResourceProperty>ts:ScannedPortsOfEntry</wsrp:ResourceProperty>
<wsrp:ResourceProperty>ts:Type</wsrp:ResourceProperty>
</wsrp:GetMultipleResourceProperties>
</Body>
</Envelope>
你应该注意到SOAP头包括WS-Addressing说明是如何同WSRF发生联系的,并且实际的体里面包含了一个对多WS-资源的属性的请求。下一个列表显示的是提供者发送的一个成功payload。
