銷售: 1-800-867-1380

租用 Blob

更新日期: 2014年1月

Lease Blob 作業會在 blob 上建立及管理鎖定,藉以寫入和刪除作業。鎖定持續時間可為 15 到 60 秒,或是無限期。在 2012-02-12 版之前的版本中,鎖定持續時間為 60 秒。

Important重要事項
從 2012-02-12 版開始,Lease Blob 作業不同於舊版。例如,在舊版 Lease Blob 作業中,您可以在釋放租用後再加以更新。從 2012-02-12 版開始,此租用要求將會失敗,但是使用舊版 Lease Blob 的呼叫仍會成功。如需此作業行為變更的清單,請參閱Changes to Lease Blob introduced in version 2012-02-12底下的Remarks一節。

Lease Blob 作業可以用下列五種個模式之一進行呼叫:

  • Acquire:要求新租用。

  • Renew:更新現有的租用。

  • Change:變更現有租用的識別碼。

  • Release:如果不再需要,可釋出租用,以便其他用戶端可以立即向 Blob 取得租用。

  • Break:結束租用,但確保其他用戶端在目前的租用期限到期之前,無法取得新的租用。

Lease Blob 要求的建構如下。建議使用 HTTPS。請以您的儲存體帳戶名稱取代 myaccount

 

  PUT 方法要求 URI HTTP 版本

https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease

HTTP/1.1

對模擬儲存體服務提出要求時,請將模擬器主機名稱和 Blob 服務通訊埠指定為 127.0.0.1:10000,後面接著模擬儲存體帳戶名稱:

 

  PUT 方法要求 URI HTTP 版本

http://127.0.0.1:10000/devstoreaccount1/mycontainer/myblob?comp=lease

HTTP/1.0

HTTP/1.1

如需詳細資訊,請參閱使用 Azure 儲存體模擬器進行開發和測試

您可以在要求的 URI 中指定下列其他參數。

 

參數 描述

timeout

選擇性。timeout 參數以秒為單位。如需詳細資訊,請參閱設定 Blob 服務作業的逾時值

下表描述必要的和選用的要求標頭。

 

要求標頭 描述

Authorization

必要項。指定驗證配置、帳戶名稱及簽章。如需詳細資訊,請參閱Azure 儲存體服務的驗證

Datex-ms-date

必要項。指定要求的國際標準時間 (UTC)。如需詳細資訊,請參閱Azure 儲存體服務的驗證

x-ms-version

選擇性。指定用於這個要求的作業版本。如需詳細資訊,請參閱Azure 儲存體服務的版本設定

x-ms-lease-id: <ID>

需要更新、變更或釋放租用。

任何有效的 GUID 字串格式中皆可指定 x-ms-lease-id 的值。如需有效的 GUID 字串格式清單,請參閱 Guid 建構函式 (字串)

x-ms-lease-action: <acquire | renew | change | release | break>

acquire:要求新租用。如果 Blob 沒有作用中的租用,Blob 服務會在 Blob 上建立租用,並傳回新的租用識別碼。如果 Blob 有作用中的租用,則您只可以使用作用中租用識別碼來要求新的租用,但可以指定新的 x-ms-lease-duration,包括永不到期租用的負一 (-1)。

renew:更新租用。如果在要求上指定的租用識別碼符合該 Blob 相關聯的租用,則租用可以更新。請注意,租用到期之後,只要 Blob 未曾修改或再度租用,即使租用已到期,還是可以更新。當您更新租用時,租用持續時間的時鐘會重設。

change:2012-02-12 版及更新的版本。變更作用中租用的租用識別碼。change 必須在 x-ms-lease-id 中包含目前的租用識別碼,並且在 x-ms-proposed-lease-id 中包含新的租用識別碼。

release:釋放租用。如果在要求上指定的租用識別碼符合該 Blob 相關聯的租用,則可以釋放租用。釋放租用可讓其他用戶端在釋放完成時,立即取得 Blob 的租用。

break:如果 Blob 有作用中的租用,則中斷租用。一旦租用中斷,即無法更新。任何獲授權的要求都可以中斷租用,不需要求即可指定相符的租用識別碼。當租用中斷時,可允許度過租用中斷期,在這段期間,除了 breakrelease 之外,不能在 Blob 上執行任何租用作業。當租用成功中斷時,回應會指出可取得新租用之前的間隔秒數。

已中斷的租用也可以釋放,在此情況下,其他用戶端可以立即在 Blob 上取得租用。

x-ms-lease-break-period: N

2012-02-12 版及更新的版本,選擇性。就 break 作業而言,這是租用在中斷之前應持續的建議秒數,介於 0 到 60 秒之間。只有在比租用的剩餘時間還短時,才會使此中斷期。如果時間較長,則會使用租用的剩餘時間。在中斷期到期之前,將無法使用新的租用,但是保留租用的時間可以比中斷期還長。如果此標頭沒有和 break 作業一起出現,固定持續時間的租用會在度過剩餘的租用時間後中斷,而無限期租用會立即中斷。

x-ms-lease-duration: -1 | N

acquire 作業只允許且需要 2012-02-12 版及更新的版本。指定租用的持續時間 (秒數),或指定負一 (-1),代表租用永不到期。非無限期的租用可以介於 15 到 60 秒之間。租用持續時間不能用 renewchange 進行變更。

x-ms-proposed-lease-id: <ID>

2012-02-12 版及更新的版本為 acquire 的選擇性項目,為 change 的必要項目。建議的租用識別碼,使用 GUID 字串格式。如果建議的租用識別碼未採用正確格式,Blob 服務會傳回 400 (Invalid request)。如需有效的 GUID 字串格式清單,請參閱 Guid 建構函式 (字串)

Origin

選擇性。指定發出要求的來源。此標頭的顯示會導致在回應上跨原始資源共用標頭。如需詳細資訊,請參閱 跨原始資源共用 (CORS) 支援 Azure 儲存體服務

x-ms-client-request-id

選擇性。提供由用戶端產生的不透明值 (具有 1 KB 的字元限制),當儲存體分析記錄為啟用狀態時,此值會記錄在分析記錄檔中。如果是和伺服器所接收的要求相關的用戶端活動,則強烈建議您使用此標頭。如需詳細資訊,請參閱關於儲存體分析記錄Windows Azure 記錄:使用記錄檔追蹤儲存體需求

唯有在符合指定條件的情況下,此作業也可支援使用條件式標頭以執行作業。如需詳細資訊,請參閱指定 Blob 服務作業的條件式標頭

無。

下列範例要求會示範如何取得租用:


Request Syntax:
PUT https://myaccount.blob.core.windows.net/mycontainer/myblob?comp=lease HTTP/1.1
Request Headers:
x-ms-version: 2012-02-12
x-ms-lease-action: acquire
x-ms-lease-duration: -1
x-ms-proposed-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
x-ms-date: Thu, 26 Jan 2012 23:30:18 GMT
Authorization: SharedKey testaccount1:esSKMOYdK4o+nGTuTyeOLBI+xqnqi6aBmiW4XI699+o=

回應包括 HTTP 狀態碼和一組回應標頭。

為租用作業傳回的成功狀態碼如下:

  • Acquire:成功的作業會傳回狀態碼「201 (已建立)」。

  • Renew:成功的作業會傳回狀態碼「200 (OK)」。

  • Change:成功的作業會傳回狀態碼「200 (OK)」。

  • Release:成功的作業會傳回狀態碼「200 (OK)」。

  • Break:成功的作業會傳回狀態碼「202 (已接受)」。

如需狀態碼的資訊,請參閱狀態和錯誤碼

這項作業的回應包括下列標頭。回應也可能包括其他標準 HTTP 標頭。所有標準標頭都符合 HTTP/1.1 通訊協定規格

 

語法 描述

ETag

ETag 標頭包含的值可讓您依條件執行作業。如需詳細資訊,請參閱指定 Blob 服務作業的條件式標頭

系統會根據對 2013-08-15 版和更新版所提出的要求傳回此標頭,而且 ETag 值會用引號括住。

Lease Blob 作業不會修改此屬性。

Last-Modified

上次修改 Blob 的日期/時間。日期格式會依照 RFC 1123。如需詳細資訊,請參閱標頭中的日期/時間值表示方式

Blob 上的任何寫入作業 (包括 Blob 的中繼資料或屬性更新) 都會變更 Blob 的上次修改時間。Lease Blob 作業不會修改此屬性。

x-ms-lease-id: <id>

當您要求租用時,Blob 服務會傳回唯一租用識別碼。當租用為作用中時,您必須包含租用識別碼,以及寫入至 Blob 或是更新、變更或釋放租用的任何要求。

成功的更新作業也會傳回作用中租用的租用識別碼。

x-ms-lease-time: seconds

在租用期間內保留的近似時間 (以秒計)。只有要求中斷租用成功,才會傳回此標頭。如果是立即中斷,則傳回 0。

x-ms-request-id

此標頭可唯一識別提出的要求,而且可用來進行要求的疑難排解。如需詳細資訊,請參閱對應用程式開發介面作業進行疑難排解

x-ms-version

指出用於執行要求的 Blob 服務版本。對 2009-09-19 及更新版本提出要求會傳回此標頭。

日期

服務產生的 UTC 日期/時間值,可指出啟動回應的時間。

Access-Control-Allow-Origin

如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。此標頭會在相符時傳回原始要求標頭的值。

Access-Control-Expose-Headers

如果要求包含 Origin 標頭,並啟用 CORS 及比對規則,則傳回此標頭。傳回向要求的用戶端或簽發者公開的回應標頭清單。

Access-Control-Allow-Credentials

如果要求包含 Origin 標頭,並啟用 CORS 及不允許所有來源的比對規則,則傳回此標頭。這個標頭會設定為 true。

無。

以下是要求取得租用的範例回應:

Response Status:
HTTP/1.1 201 Created
Response Headers:
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: cc6b209a-b593-4be1-a38a-dde7c106f402
x-ms-version: 2012-02-12
x-ms-lease-id: 1f812371-a41d-49e6-b123-f4b542e851c5
Date: Thu, 26 Jan 2012 23:30:18 GMT

帳戶擁有者以及擁有共用存取簽章的任何用戶端才能呼叫此作業,且簽章需有此 Blob 或其容器的寫入權限。

Blob 上的租用提供寫入及刪除 Blob 的專有存取權。若要寫入含有作用中租用的 Blob,用戶端必須包含具有寫入要求的租用識別碼。取得租用時會指定所授與的租用持續時間,可以是 15 秒到一分鐘之間,或是無限期。

當用戶端取得租用時,會傳回租用識別碼。如果取得要求中沒有指定租用識別碼,Blob 服務將會產生租用識別碼。用戶端可以使用此租用識別碼更新租用、變更其租用識別碼,或是釋放租用。

當租用為作用中,租用識別碼必須包含在下列任何作業的要求:

如果沒有包含租用識別碼,這些作業將會在租用的 Blob 上失敗,並顯示 412 – Precondition failed

在未包含租用識別碼的情況下,下列作業在租用的 Blob 上會成功:

在擁有作用中租用的 Blob 上,GET 作業不需要包含租用識別碼。不過,所有 GET 作業都支援條件式租用參數,但是隨附於要求的租用識別碼必須有效,作業才會進行。

將擁有作用中租用的 Blob 包含在內的容器上,可允許所有容器作業,包括刪除容器。因此,即使容器中的 Blob 擁有作用中租用,還是可能會刪除容器。使用 租用容器 作業以控制刪除容器的權限。

下圖顯示租用的五個狀態,以及會導致租用狀態變更的命令或事件。

Blob 租用狀態和狀態變更觸發程序

租用狀態

根據租用是否被鎖定,以及在該狀態下是否可以更新租用,可將租用分為 5 種狀態。上述租用動作會導致狀態轉換。

 

  鎖定的租用 解除鎖定的租用

可更新的租用

已租用

已過期

不可更新的租用

中斷

中斷、可用

  • Available:租用已解除鎖定,並可取得。允許的動作:acquire

  • Leased:租用已鎖定。允許的動作:acquire (僅限相同的租用識別碼)、renewchangereleasebreak

  • Expired:租用持續時間到期。允許的動作:acquirerenewreleasebreak

  • Breaking:租用已中斷,但是租用將繼續鎖定,直到中斷期到期為止。允許的動作:releasebreak

  • Broken:租用已中斷,且中斷期已到期。允許的動作:acquirereleasebreak

一旦租用到期,Blob 服務就會維護租用識別碼,直到 Blob 修改或再度租用。用戶端可嘗試使用已到期的租用識別碼,藉以更新或釋放其租用,如果作業成功即可得知,自從租用識別碼上次驗證有效至今,Blob 都沒有變更。

如果用戶端嘗試使用先前的租用識別碼更新或釋放租用,且要求失敗,用戶端就會知道自從其租用的上次作用至今,Blob 已修改或再度租用。而用戶端就必須在 Blob 上取得新的租用。

如果租用到期,而不是明確地釋放,用戶端可能需要稍候一分鐘,才能為 Blob 取得新的租用。不過,如果 Blob 未修改,用戶端就可以立即以其租用識別碼更新租用。

請注意,無法為 Blob 快照集授與租用,因為快照集是唯讀的。向快照集要求租用會導致狀態碼 400 (不正確的要求)。

呼叫 Lease Blob 不會更新 Blob 的 Last-Modified-Time 屬性。

下表顯示租用處於各種租用狀態時,在 Blob 上執行動作的結果。字母 (A)、(B) 和 (C) 代表租用識別碼,而 (X) 代表 Blob 服務產生的租用識別碼。

Blob 上的使用嘗試結果 (依租用狀態)

  可用 已租用 (A) 正在中斷 (A) 已中斷 (A) 已過期 (A)

寫入使用 (A)

失敗 (412)

已租用 (A),寫入成功

中斷中 (A),寫入成功

失敗 (412)

失敗 (412)

寫入使用 (B)

失敗 (412)

失敗 (409)

失敗 (412)

失敗 (412)

失敗 (412)

寫入,未指定租用

可用,寫入成功

失敗 (412)

失敗 (412)

可用,寫入成功

可用,寫入成功

讀取使用 (A)

失敗 (412)

已出租 (A),讀取成功

中斷中 (A),讀取成功

失敗 (412)

失敗 (412)

讀取使用 (B)

失敗 (412)

失敗 (409)

失敗 (409)

失敗 (412)

失敗 (412)

讀取,未指定租用

可用,讀取成功

已出租 (A),讀取成功

中斷中 (A),讀取成功

已中斷 (A),讀取成功

已過期 (A),讀取成功

Blob 上的租用作業結果 (依租用狀態)

  可用 已租用 (A) 正在中斷 (A) 已中斷 (A) 已過期 (A)

Acquire:沒有建議的租用識別碼

已租用 (X)

失敗 (409)

失敗 (409)

已租用 (X)

已租用 (X)

Acquire (A)

已租用 (A)

已租用 (A),新的持續時間

失敗 (409)

已租用 (A)

已租用 (A)

Acquire (B)

已租用 (B)

失敗 (409)

失敗 (409)

已租用 (B)

已租用 (B)

Break 期間 = 0

失敗 (409)

已中斷 (A)

已中斷 (A)

已中斷 (A)

已中斷 (A)

Break 期間 > 0

失敗 (409)

正在中斷 (A)

正在中斷 (A)

已中斷 (A)

已中斷 (A)

Change,(A) 到 (B)

失敗 (409)

已租用 (B)

失敗 (409)

失敗 (409)

失敗 (409)

Change,(B) 到 (A)

失敗 (409)

已租用 (A)

失敗 (409)

失敗 (409)

失敗 (409)

Change,(B) 到 (C)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

Renew (A)

失敗 (409)

已租用 (A),到期時鐘重設

失敗 (409)

失敗 (409)

已租用 (A),如果 Blob 未修改。

失敗 (409),如果 Blob 已修改。

Renew (B)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

Release (A)

失敗 (409)

可用

可用

可用

可用

Release (B)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

失敗 (409)

持續時間到期

可用

已過期 (A)

已中斷 (A)

已中斷 (A)

已過期 (A)

Changes to Lease Blob introduced in version 2012-02-12

下列清單指出 2012-02-12 版中導入的租用 Blob 行為變更。

  • 現在若要呼叫租用 Blob 取得租用,必須包含租用持續時間標頭。在未指定租用持續時間的情況下,嘗試取得租用將會失敗,並出現下列訊息:400 Bad Request – Missing required header

  • 在釋放租用之後,無法再將其更新。嘗試這麼做將會失敗,並出現下列訊息:409 Conflict – The lease ID specified did not match the lease ID for the blob。先呼叫釋放然後呼叫更新的應用程式,現在必須儲存釋放呼叫所產生的 ETag,然後以 If-Match 條件式標頭呼叫取得,只在 Blob 未變更的情況下取得租用。

  • 在釋放租用之後,您無法再將其中斷。現在嘗試這麼做將會失敗,並出現下列訊息:409 Conflict – There is currently no lease on the blob

  • 您現在可以中斷正在中斷或已中斷的租用,使中斷作業等冪。在舊版中,這樣會失敗並出現下列訊息:409 Conflict – The lease has already been broken and cannot be broken again。這項變更可讓您縮短中斷的持續時間。如果您中斷處於中斷狀態的租用,而且包含的持續時間比剩餘的中斷期還短,會使用較短的持續時間。

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
顯示:
© 2014 Microsoft