WS-ResourceLifetime協(xié)議
WS-ResourceLifetime協(xié)議定義了WS-Resource的資源銷毀機(jī)制,其中包括資源的立即銷毀和資源的調(diào)度銷毀。立即銷毀使得客戶可以顯示地要求對特定的WS-Resource進(jìn)行銷毀,從而釋放該WS-Resource占用的系統(tǒng)資源。調(diào)度銷毀則允許客戶通過設(shè)定某個WS-Resource的預(yù)定銷毀時間(Termination Time),由引擎負(fù)責(zé)在其生命周期結(jié)束時對其進(jìn)行銷毀。在每一種情況都要明白,只有 WS-Resource — 有狀態(tài)資源和 Web 服務(wù)的關(guān)聯(lián)—被銷毀。資源本身和 Web 服務(wù)都沒有受到影響。
另外值得注意的是此協(xié)議并沒有定義WS-Resource的創(chuàng)建方式。
我們可以發(fā)送“create”消息:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<createSatellite xmlns="http://example.com/satellite"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
結(jié)果是一個 SOAP 消息,其中包含對操作創(chuàng)建的 WS-Resource 的端點(diǎn)引用:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:sat="http://example.org/satelliteSystem">
<wsa:Address> http://example.com/satellite</wsa:Address>
<wsa:ReferenceProperties>
<sat:SatelliteId>SAT9928</sat:SatelliteId>
</wsa:ReferenceProperties>
</wsa:EndpointReference>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
該端點(diǎn)引用惟一地識別正在談?wù)摰?/span> WS-Resource,所以我們可以使用它來銷毀該 WS-Resource。
當(dāng)我們準(zhǔn)備銷毀 WS-Resource 時,可以使用它的端點(diǎn)引用來創(chuàng)建 SOAP 請求:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action>
http://docs.oasis-open.org/wsrf/2004/06/WS-ResourceLifetime/Destroy
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/satellite
</wsa:To>
<sat:SatelliteId>SAT9928</sat:SatelliteId>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrl:Destroy />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
假設(shè)一切正常,我們會收到確認(rèn)消息:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action>
http://docs.oasis-open.org/wsrf/2004/06/WS-ResourceLifetime/DestroyResponse
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/myClient
</wsa:To>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrl:DestroyResponse />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
這似乎不怎么像確認(rèn)消息,但是只要收到它,就可以知道一切正常。如果不是一切正常,就會得到 WSRF 故障:WS-ResourceLifetime 中所討論的一條 fault 消息。如果在 WS-Resource 銷毀后還試圖訪問它,也會得到故障消息。
我們也可以安排 WS-Resource 在以后銷毀。
我們并不總是想要當(dāng)場銷毀 WS-Resource。在有些情況下,我們只是想要保持 WS-Resource 活躍一段特定的時間,然后再讓它銷毀。為了做到這一點(diǎn),我們需要給 WS-Resource 附加一個 TerminationTime 屬性,這意味著將它添加到資源屬性文檔。對于我們的人造衛(wèi)星,意味著類似下面的這些東西:
<satProp:GenericSatelliteProperties
xmlns:satProp="http://example.com/satellite"
xmlns:counterProp="http://example.com/satellite/CounterSatelliteProperties"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<satProp:latitude>30.3</satProp:latitude>
<satProp:longitude>223.2</satProp:latitude>
<satProp:altitude>47700</satProp:altitude>
<satProp:pitch>49</satProp:pitch>
<satProp:yaw>0</satProp:yaw>
<satProp:roll>32</satProp:roll>
<satProp:focalLength>
21999992
</satProp:focalLength>
<satProp:currentView>
http://example.com/satellite/2239992333.zip
</satProp:currentView>
<counterProp:currentCount>
92828
</counterProp:currentCount>
<wsrl:TerminationTime>
2005-12-31T12:00:00
</wsrl:TerminationTime>
<wsrl:CurrentTime>2005-2-15T03:24:57</CurrentTime>
</satProp:GenericSatelliteProperties>
如果像本例中一樣,沒有指定時區(qū),就會假設(shè)是格林威治標(biāo)準(zhǔn)時間。
注意,除了 TerminationTime,我們還添加了 CurrentTime。該屬性使我們不必同步時鐘,下面您就會看到。
獲得 CurrentTime 和 TerminationTime
由于不同系統(tǒng)上的客戶機(jī),因而潛在地存在時鐘同步的嚴(yán)重問題。例如,假設(shè)我們想要指定剛才創(chuàng)建的人造衛(wèi)星 WS-Resource 應(yīng)該在 4 小時后終止。選擇一個相對于客戶機(jī)的時間將會成為問題,因?yàn)樵陬A(yù)定銷毀情況下,實(shí)際上是由服務(wù)器銷毀引用的。
幸運(yùn)的是,WS-Resource 帶有自己的“當(dāng)前時間”。因?yàn)樗琴Y源屬性文檔的一部分,所以我們可以像請求任何其他屬性一樣請求它:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action>
http://docs.oasis-open.org/wsrf/2004/06/WS-ResourceProperties/GetMultipleResourceProperties
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/satellite
</wsa:To>
<sat:SatelliteId>SAT9928</sat:SatelliteId>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrp:GetMultipleResourceProperties>
<wsrp:ResourceProperty>wsrl:CurrentTime</wsrp:ResourceProperty>
<wsrp:ResourceProperty>wsrl:TerminationTime</wsrp:ResourceProperty>
</wsrp:GetMultipleResourceProperties>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在本例中,我們請求了 CurrentTime 和 TerminationTime,所以響應(yīng)中包含了它們倆:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action> http://docs.oasis-open.org/wsrf/2004/06/WS-Resour
ceProperties/GetMutlipleResourcePropertiesResponse
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/myClient
</wsa:To>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrp:GetMultipleResourcePropertiesResponse>
<wsrl:CurrentTime>2005-2-15T03:24:57</wsrl:CurrentTime>
<wsrl:TerminationTime>2005-2-15T03:30:00</wsrl:TerminationTime>
</wsrp:GetMultipleResourcePropertiesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
在應(yīng)用程序中,然后我們可以使用 CurrentTime 來確定和設(shè)置新的 TerminationTime。
注意,盡管我們可以像請求任何其他資源屬性一樣請求 CurrentTime 和 TerminationTime,但是不能像設(shè)置任何其他資源屬性一樣設(shè)置它們。CurrentTime 是只讀的,而 TerminationTime 必須使用我們下面將會看到的消息來設(shè)置。
設(shè)置新的 TerminationTime
一旦為 TerminationTime 確定了適當(dāng)?shù)闹担覀兙涂梢园l(fā)送 SetTerminationTime 消息了:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action>
http://docs.oasis-open.org/wsrf/2004/06/WS-ResourceLifetime/SetTerminationTime
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/satellite
</wsa:To>
<sat:SatelliteId>SAT9928</sat:SatelliteId>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrl:SetTerminationTime>
<wsrl:RequestedTerminationTime>
2005-2-15T07:24:00
</wsrl:RequestedTerminationTime>
</wsrl:SetTerminationTime>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
注意,我們不是通過直接操縱 TerminationTime 屬性來設(shè)置時間的。這是因?yàn)槲覀冃枰到y(tǒng)實(shí)施它自己的任何一個時間相關(guān)規(guī)則,比如,不縮短資源的生存期,或者不擴(kuò)展它超過某個特定的點(diǎn)。
響應(yīng)消息包含新的 TerminationTime 和 CurrentTime:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:sat="http://example.org/satelliteSystem"
xmlns:wsa="http://www.w3.org/2005/02/addressing"
xmlns:wsrp="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceProperties-1.2-draft-01.xsd"
xmlns:wsrl="http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd">
<SOAP-ENV:Header>
<wsa:Action>
http://docs.oasis-open.org/wsrf/2004/06/WS-ResourceLifetime/SetTerminationTimeResponse
</wsa:Action>
<wsa:To SOAP-ENV:mustUnderstand="1">
http://example.com/myClient
</wsa:To>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<wsrl:SetTerminationTimeResponse>
<wsrl:NewTerminationTime>2005-2-15T07:24:00</wsrl:NewTerminationTime>
<wsrl:CurrentTime>2005-2-15T03:25:08</wsrl:CurrentTime>
</wsrl:SetTerminationTimeResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
除非應(yīng)用程序本身具有設(shè)置時間的特定規(guī)則,否則沒有任何特殊的約束。您甚至可以將 TerminationTime 設(shè)置為過去的值,這與發(fā)送 Destroy 消息的效果是一樣的。
Author: orangelizq
email: orangelizq@163.com
posted on 2009-07-19 15:45
桔子汁 閱讀(342)
評論(0) 編輯 收藏 所屬分類:
Web Service