使用 Azure 儲存體模擬器進行開發和測試 (已淘汰)

Microsoft Azure 儲存體模擬器是一項工具,可以針對本機開發目的模擬 Azure Blob、佇列和資料表服務。 您可以針對儲存體服務在本機測試您的應用程式,而不需建立 Azure 訂用帳戶,也不會產生任何費用。 如果您滿意應用程式在模擬器中的運作方式,就可以切換成使用雲端的 Azure 儲存體帳戶。

重要

Azure 儲存體模擬器現在已淘汰。 Microsoft 建議您搭配 Azure 儲存體使用 Azurite 模擬器來進行本機開發。 Azurite 會取代 Azure 儲存體模擬器。 Azurite 將繼續更新以支援最新版本的 Azure 儲存體 API。 如需詳細資訊,請參閱使用 Azurite 模擬器進行本機 Azure 儲存體開發

取得儲存體模擬器

儲存體模擬器隨 Microsoft Azure SDK 提供。 您也可以使用獨立安裝程式 (直接下載) 來安裝儲存體模擬器。 若要安裝儲存體模擬器,您必須具有電腦上的系統管理權限。

儲存體模擬器目前只能在 Windows 上執行。 針對 Linux 上的模擬,請使用 Azurite 模擬器。

注意

在某個儲存體模擬器版本中建立的資料不保證可在使用不同版本時加以存取。 如果您需要長期保存資料,建議您將該資料儲存於 Azure 儲存體帳戶中 (而不是儲存體模擬器中)。

儲存體模擬器取決於特定的 OData 程式庫版本。 不支援將儲存體模擬器所使用的 OData DLL 更換為其他版本,而且可能會造成非預期的行為。 不過,儲存體服務支援的任何版本 OData 可能用來將要求傳送至模擬器。

儲存體模擬器的運作方式

儲存體模擬器會使用本機 Microsoft SQL Server 2012 Express LocalDB 執行個體來模擬 Azure 儲存體服務。 您可以選擇設定儲存體模擬器存取 SQL Server 本機執行個體,而非 LocalDB 執行個體。 如需詳細資訊,請參閱本文稍後的啟動及初始化儲存體模擬器一節。

儲存體模擬器會使用 Windows 驗證,連線到 SQL Server 或 LocalDB。

儲存體模擬器與 Azure 儲存體服務的功能有所差異。 如需有關這些差異的詳細資訊,請參閱本文稍後的儲存體模擬器和 Azure 儲存體之間的差異一節。

啟動及初始化儲存體模擬器

啟動 Azure 儲存體模擬器:

  1. 選取 [開始] 按鈕或按下 [Windows] 鍵。
  2. 開始輸入 Azure Storage Emulator
  3. 從顯示的應用程式清單中選取模擬器。

當儲存體模擬器啟動時,將會出現 [命令提示字元] 視窗。 您可以使用此主控台視窗來啟動和停止儲存體模擬器。 您也可以從命令提示字元清除資料、取得狀態,以及初始化模擬器。 如需詳細資訊,請參閱本文稍後的儲存體模擬器命令列工具參考一節。

注意

如果另一個儲存體模擬器 (例如 Azurite) 正在系統上執行,則 Azure 儲存體模擬器可能無法正確啟動。

如果模擬器正在執行,您就會在 Windows 工作列通知區域看到圖示。

當您關閉儲存體模擬器的 [命令提示字元] 視窗時,儲存體模擬器將會繼續執行。 若要再次顯示 [儲存體模擬器] 主控台視窗,請遵循先前步驟,如同啟動儲存體模擬器一樣。

當您第一次執行儲存體模擬器時,系統會為您初始化本機儲存體環境。 初始化處理程序會在 LocalDB 中建立資料庫,並為每個本機儲存體服務保留 HTTP 連接埠。

預設會將儲存體模擬器安裝至 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator

提示

您可以使用 Microsoft Azure 儲存體總管來使用本機儲存體模擬器資源。 在您安裝並啟動儲存體模擬器之後,請在儲存體總管資源樹狀結構中的「本機和已連結」底下尋找「(模擬器 - 預設連接埠) (金鑰)」。

初始化儲存體模擬器以使用不同的 SQL 資料庫

您可以使用儲存體模擬器命令列工具來初始化儲存體模擬器,以指向預設 LocalDB 執行個體以外的 SQL 資料庫執行個體:

  1. 開啟 [儲存體模擬器] 主控台視窗,如啟動及初始化儲存體模擬器一節中所述。

  2. 在主控台視窗中,輸入下列命令,其中 <SQLServerInstance> 是 SQL Server 執行個體的名稱。 若要使用 LocalDB,請指定 (localdb)\MSSQLLocalDb 做為 SQL Server 執行個體。

    AzureStorageEmulator.exe init /server <SQLServerInstance>

    您也可以使用下列命令,引導模擬器使用預設的 SQL Server 執行個體:

    AzureStorageEmulator.exe init /server .

    或者,您也可以使用下列命令,將資料庫初始化至預設 LocalDB 執行個體:

    AzureStorageEmulator.exe init /forceCreate

如需有關這些命令的詳細資訊,請參閱儲存體模擬器命令列工具參考

提示

您可以使用 Microsoft SQL Server Management Studio (SSMS) 來管理您的 SQL Server 執行個體,包括 LocalDB 安裝。 在 SMSS [連接到伺服器] 對話方塊中,於 [伺服器名稱:] 欄位中指定 (localdb)\MSSQLLocalDb,以連接到 LocalDB 執行個體。

對儲存體模擬器的驗證要求

一旦您安裝並啟動儲存體模擬器,就可以對其測試您的程式碼。 您針對儲存體模擬器傳送的每個要求都必須經過授權,除非是匿名要求。 您可以使用共用金鑰驗證或共用存取簽章 (SAS),授權傳送給儲存體模擬器的要求。

使用共用金鑰認證進行授權

模擬器支援共用金鑰驗證的單一固定帳戶及已知驗證金鑰。 此帳戶和金鑰都是唯一允許搭配模擬器使用的共用金鑰認證。 其中包括:

Account name: devstoreaccount1
Account key: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

注意

模擬器所支援的驗證金鑰僅可用來測試用戶端驗證碼的功能。 它不提供任何安全性用途。 您無法將生產儲存體帳戶和金鑰與模擬器搭配使用。 您不應該將開發帳戶與生產資料搭配使用。

模擬器只透過 HTTP 支援連線。 不過,HTTPS 是建議的通訊協定,用於存取生產 Azure 儲存體帳戶中的資源。

使用捷徑連接到模擬器帳戶

從您的應用程式連線到模擬器的最簡單方法,就是在應用程式參照捷徑 UseDevelopmentStorage=true 的組態檔中設定連接字串。 此捷徑相當於模擬器的完整連接字串,會指定每個 Azure 儲存體服務的帳戶名稱、帳戶金鑰和模擬器端點:

DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;
AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;
BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;
TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;

下列 .NET 程式碼片段會示範如何從採用連接字串的方法使用捷徑。 例如,BlobContainerClient(String, String) 建構函式會採用連接字串。

BlobContainerClient blobContainerClient = new BlobContainerClient("UseDevelopmentStorage=true", "sample-container");
blobContainerClient.CreateIfNotExists();

在呼叫程式碼片段中的程式碼之前,請先確定模擬器可執行。

如需連接字串的詳細資訊,請參閱設定 Azure 儲存體連接字串

使用共用存取簽章進行授權

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

某些 Azure 儲存體用戶端程式庫 (例如 Xamarin 程式庫),僅支援使用共用存取簽章 (SAS) 權杖進行的驗證。 您可以使用儲存體總管或其他支援共用金鑰驗證的應用程式來建立 SAS 權杖。

您也可以使用 Azure PowerShell 來產生 SAS 權杖。 下列範例會產生 SAS 權杖且對 blob 容器具有完整權限:

  1. 安裝 Azure PowerShell (如果您尚未安裝,建議使用 Azure PowerShell Cmdlet 的最新版本)。 如需安裝指示,請參閱安裝和設定 Azure PowerShell
  2. 開啟 Azure PowerShell 並執行下列命令,使用您所選的名稱來取代 CONTAINER_NAME
$context = New-AzStorageContext -Local

New-AzStorageContainer CONTAINER_NAME -Permission Off -Context $context

$now = Get-Date

New-AzStorageContainerSASToken -Name CONTAINER_NAME -Permission rwdl -ExpiryTime $now.AddDays(1.0) -Context $context -FullUri

針對新容器產生的共用存取簽章 URI 應該類似下列項目:

http://127.0.0.1:10000/devstoreaccount1/sascontainer?sv=2012-02-12&se=2015-07-08T00%3A12%3A08Z&sr=c&sp=wl&sig=t%2BbzU9%2B7ry4okULN9S0wst/8MCUhTjrHyV9rDNLSe8g%3Dsss

使用此範例建立的共用存取簽章的效期為一天。 簽章會將完整存取權限 (讀取、寫入、刪除、列出) 授與容器內的 Blob。

如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS) 授與 Azure 儲存體資源的有限存取權

在儲存體模擬器中為資源定址

儲存體模擬器的服務端點與 Azure 儲存體帳戶的端點不同。 本機電腦不會進行網域名稱解析,要求儲存體模擬器端點必須是本機位址。

當您在 Azure 儲存體帳戶中定址資源時,可使用下列配置。 帳戶名稱是 URI 主機名稱的一部分,而要定址的資源是 URI 路徑的一部分:

<http|https>://<account-name>.<service-name>.core.windows.net/<resource-path>

例如,下列 URI 是 Azure 儲存體帳戶中的有效 blob 位址:

https://myaccount.blob.core.windows.net/mycontainer/myblob.txt

因為本機電腦不會進行網域名稱解析,所以帳戶名稱是 URI 路徑的一部分,而不是主機名稱。 針對儲存體模擬器中的資源使用下列 URI 格式:

http://<local-machine-address>:<port>/<account-name>/<resource-path>

例如,下列位址可能會用於存取儲存體模擬器中的 Blob:

http://127.0.0.1:10000/myaccount/mycontainer/myblob.txt

儲存體模擬器的服務端點包括:

  • Blob 服務:http://127.0.0.1:10000/<account-name>/<resource-path>
  • 佇列服務:http://127.0.0.1:10001/<account-name>/<resource-path>
  • 表格服務:http://127.0.0.1:10002/<account-name>/<resource-path>

使用 RA-GRS 為帳戶次要位址定址

從 3.1 版開始,儲存體模擬器就支援讀取權限異地備援複寫 (RA-GRS)。 您可以將 -secondary 附加至帳戶名稱,以存取次要位置。 例如,下列位址可能會用於在儲存體模擬器中使用唯讀的次要位置來存取 Blob:

http://127.0.0.1:10000/myaccount-secondary/mycontainer/myblob.txt

注意

如需以程式設計方式使用儲存體模擬器來存取次要位置,請使用適用於 .NET 的儲存體用戶端程式庫 3.2 版或更新版本。 如需詳細資訊,請參閱 Microsoft Azure Storage Client Library for .NET (適用於 .NET 的 Microsoft Azure 儲存體用戶端程式庫)。

儲存體模擬器命令列工具參考

從 3.0 版開始,當您啟動儲存體模擬器時,就會顯示主控台視窗。 在主控台視窗中使用命令列來啟動和停止模擬器。 您也可以查詢狀態,並從命令列進行其他作業。

注意

如果您已安裝 Microsoft Azure 計算模擬器,當您啟動儲存體模擬器時,就會出現系統匣圖示。 使用滑鼠右鍵按一下圖示即可顯示功能表,提供圖形化方式來啟動和停止儲存體模擬器。

命令列語法

AzureStorageEmulator.exe [start] [stop] [status] [clear] [init] [help]

選項

若要檢視選項清單,請在命令提示字元輸入 /help

選項 描述 命令 引數
開始 啟動儲存體模擬器。 AzureStorageEmulator.exe start [-inprocess] -Reprocess:在目前的處理序中啟動模擬器,而不是建立新的處理序。
停止 停止儲存體模擬器。 AzureStorageEmulator.exe stop
狀態 列印儲存體模擬器的狀態。 AzureStorageEmulator.exe status
清除 清除命令列上指定的所有服務中的資料。 AzureStorageEmulator.exe clear [blob] [table] [queue] [all] blob:清除 blob 資料。
queue:清除佇列資料。
table:清除資料表資料。
all:清除所有服務中的所有資料。
Init 執行一次初始化以設定模擬器。 AzureStorageEmulator.exe init [-server serverName] [-sqlinstance instanceName] [-forcecreate|-skipcreate] [-reserveports|-unreserveports] [-inprocess] -server serverName\instanceName︰指定裝載 SQL 執行個體的伺服器。
-sqlinstance instanceName:指定在預設伺服器執行個體中使用之 SQL 執行個體的名稱。
-forcecreate:強制建立 SQL 資料庫,即使它已經存在。
-skipcreate︰略過建立 SQL 資料庫。 其優先順序高於 -forcecreate。
-reserveports︰嘗試保留與服務相關聯的 HTTP 連接埠。
-unreserveports︰嘗試移除服務相關聯 HTTP 連接埠的保留。 其優先順序高於 -reserveports。
-inprocess:在目前的處理序中執行初始化,而不是繁衍新的處理序。 如果變更連接埠保留,必須以提高權限啟動目前的處理程序。

儲存體模擬器和 Azure 儲存體之間的差異

因為儲存體模擬器是本機模擬環境,所以在雲端使用模擬器和 Azure 儲存體帳戶之間有一些差異:

  • 儲存體模擬器僅支援單一固定帳戶及已知的驗證金鑰。
  • 儲存體模擬器不是可擴充的儲存體服務,也不支援大量並行用戶端。
  • 在儲存體模擬器中定址資源中所述,資源在儲存體模擬器與在 Azure 儲存體帳戶中的定址方式不同。 這項差別的原因是,雲端提供網域名稱解析,而本機電腦沒有提供。
  • 從 3.1 版開始,儲存體模擬器帳戶就支援讀取權限異地備援複寫 (RA-GRS)。 在模擬器中,所有帳戶均已啟用 RA-GRS,而且主要和次要複本之間絕對不會有延遲。 次要帳戶支援 Get Blob Service Stats、Get Queue Service Stats 和 Get Table Service Stats 作業,且這些作業一律會根據基礎 SQL 資料庫傳回 LastSyncTime 回應元素的值當成目前的時間。
  • 儲存體模擬器目前不支援檔案服務和 SMB 通訊協定服務端點。
  • 如果模擬器不支援您使用的儲存體服務版本,該模擬器就會傳回 VersionNotSupportedByEmulator 錯誤 (HTTP 狀態碼 400-不正確的要求)。

Blob 儲存體的差異

下列差異適用於模擬器中的 Blob 儲存體:

  • 儲存體模擬器最多只支援 2 GB 的 Blob 大小。
  • 儲存體模擬器中的 Blob 名稱長度上限是 256 個字元,而 Azure 儲存體中的 Blob 名稱長度上限是 1024 個字元。
  • 增量複本會讓來自覆寫 blob 的快照進行複製,其會在服務時傳回失敗。
  • 取得頁面範圍差異無法在使用累加複製 Blob 複製的快照之間運作。
  • 針對存在於儲存體模擬器中的 Blob 進行的 Put Blob 作業會成功,並擁有作用中的租用 (即使要求中並未指定租用識別碼)。
  • 模擬器不支援附加 Blob 作業。 在附加 Blob 上嘗試作業會傳回 FeatureNotSupportedByEmulator 錯誤 (HTTP 狀態碼 400-不正確的要求)。

資料表儲存體的差異

下列差異適用於模擬器中的資料表儲存體:

  • 在儲存體模擬器中,表格服務的日期屬性只支援 SQL Server 2005 所支援的範圍 (必須晚於 1753 年 1 月 1 日)。 1753 年 1 月 1 日之前的所有日期都會變成此值。 日期的精確度受限於 SQL Server 2005 的精確度,也就是會精確度達到 1/300 秒。
  • 儲存體模擬器支援屬性值小於 512 個位元組的資料分割索引鍵與資料列索引鍵。 帳戶名稱、資料表名稱及索引鍵屬性名稱的大小總計不得超過 900 個位元組。
  • 在儲存體模擬器中,資料表的資料列大小總計限制為小於 1 MB。
  • 在儲存體模擬器中,資料類型 Edm.GuidEdm.Binary 的屬性只支援查詢篩選字串中的 Equal (eq)NotEqual (ne) 比較運算子。

佇列儲存體的差異

模擬器中的佇列儲存體沒有特定差異。

儲存體模擬器版本資訊

5.10 版

  • 儲存體模擬器不會拒絕 Blob、佇列和資料表服務端點上 2019-07-07 版的儲存體服務。

5.9 版

  • 儲存體模擬器不會拒絕 Blob、佇列和資料表服務端點上 2019-02-02 版的儲存體服務。

5.8 版

  • 儲存體模擬器不會拒絕 Blob、佇列和資料表服務端點上 2018-11-09 版的儲存體服務。

5.7 版

  • 已修正啟用記錄時會造成當機的錯誤。

5.6 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2018-03-28 版的儲存體服務。

版本 5.5

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2017-11-09 版的儲存體服務。
  • 已新增 Blob Created 屬性的支援,它會傳回 Blob 建立時間。

版本 5.4

  • 若要改善安裝穩定性,模擬器不會嘗試在安裝時保留連接埠。 如果您想要保留連接埠,可以使用 init 命令的 -reserveports 選項來指定連接埠。

版本 5.3

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2017-07-29 版的儲存體服務。

5.2 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2017-04-17 版的儲存體服務。
  • 已修正資料表屬性值未正確編碼的錯誤。

版本 5.1

  • 修正了儲存體模擬器在某些回應中傳回 DataServiceVersion 標頭 (但服務未傳回) 的問題。

版本 5.0

  • 儲存體模擬器安裝程式不再會檢查現有的 MSSQL 和 .NET Framework 安裝。
  • 儲存體模擬器安裝程式不再會隨著安裝建立資料庫。 必要時仍會隨著啟動建立資料庫。
  • 建立資料庫不再需要提高權限。
  • 啟動不再需要保留連接埠。
  • 將下列選項新增至 init-reserveports (需要提高權限)、-unreserveports (需要提高權限)、-skipcreate
  • 系統匣圖示上的儲存體模擬器 UI 上選項現在會啟動命令列介面。 已不再使用舊 GUI。
  • 某些 DLL 已移除或重新命名。

版本 4.6

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2016-05-31 版的儲存體服務。

版本 4.5

  • 修正了當重新命名備份資料庫時,導致安裝和初始化失敗的錯誤。

4.4 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2015-12-11 版的儲存體服務。
  • 現在,處理大量 Blob 時,儲存體模擬器的 Blob 資料記憶體回收更有效率。
  • 修正了造成容器 ACL XML 的驗證方式與儲存體服務的運作方式稍有不同的錯誤。
  • 修正了有時造成報告的日期時間上限和下限值時區不正確的錯誤。

版本 4.3

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2015-07-08 版的儲存體服務。

4.2 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2015-04-05 版的儲存體服務。

4.1 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2015-02-21 版的儲存體服務。 不支援新的附加 Blob 功能。
  • 模擬器現在會針對不支援的儲存體服務版本傳回有意義的錯誤訊息。 我們建議使用最新版本的模擬器。 如果您遇到 VersionNotSupportedByEmulator 錯誤 (HTTP 狀態碼 400 - 不正確的要求),請下載最新版的模擬器。
  • 修正競爭情形造成資料表實體資料在並行合併作業期間會不正確的 bug。

4.0 版

  • 儲存體模擬器的可執行檔已重新命名為 AzureStorageEmulator.exe

3.2 版

3.1 版

  • 儲存體模擬器現在支援讀取權限異地備援儲存體 (RA-GRS)。 Get Blob Service StatsGet Queue Service StatsGet Table Service Stats API 支援次要帳戶,並且一律會根據基礎 SQL 資料庫,將 LastSyncTime 回應元素的值傳回為目前時間。 如需以程式設計方式使用儲存體模擬器來存取次要位置,請使用適用於 .NET 的儲存體用戶端程式庫 3.2 版或更新版本。 如需詳細資訊,請參閱「Microsoft Azure Storage Client Library for .NET」。

3.0 版

  • Azure 儲存體模擬器不再隨附於計算模擬器套件。
  • 儲存體模擬器圖形化使用者介面已淘汰。 已由可編寫指令碼的命令列介面取代。 如需有關命令列介面的詳細資訊,請參閱儲存體模擬器命令列工具參考。 3.0 版仍將提供圖形化介面,除非在系統匣圖示按一下滑鼠右鍵並選取 [顯示儲存體模擬器 UI] 的方式安裝計算模擬器,否則無法存取圖形化介面。
  • 現在完全支援 2013-08-15 版的 Azure 儲存體服務。 (先前只有儲存體模擬器 2.2.1 版預覽才支援此版本)。

下一步

另請參閱