使用 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 儲存體 Emulator。
  3. 從顯示的應用程式清單中選取模擬器。

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

注意

如果系統上同時運行其他儲存模擬器(如 Azurite),Azure 儲存體 模擬器可能無法正常啟動。

當模擬器正在執行時,你會在 Windows 工作列通知區看到一個圖示。

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

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

儲存模擬器的預設安裝路徑為 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator。

提示

使用 Microsoft Azure 儲存體總管 來處理本地的 Storage Emulator 資源。 安裝並啟動 Storage Emulator 後,請在 儲存體總管 資源樹中的 本機與已連結 下尋找 (Emulator - Default Ports) (Key)。

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

使用 Storage Emulator 命令列工具,初始化儲存模擬器,使其指向非預設 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 安裝。 在 SSMS 「連線到伺服器」對話方塊中,請在 (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。

你可以使用 儲存體總管 或其他支援共享金鑰認證的應用程式來建立 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=rwdl&sig=t%2BbzU9%2B7ry4okULN9S0wst/8MCUhTjrHyV9rDNLSe8g%3D

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

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

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

儲存體模擬器的服務端點與 Azure 儲存體帳戶的端點不同。 本地電腦不做網域名稱解析,所以 Storage Emulator 的端點是本地位址。

當您在 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 儲存體 Client Library for .NET (適用於 .NET 的 Microsoft Azure 儲存體用戶端程式庫)。

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

從 3.0 版本開始,啟動儲存模擬器時會顯示一個主控台視窗。 在主控台視窗中使用命令列來啟動和停止模擬器。 你也可以查詢狀態並從命令列執行其他操作。

注意

如果您已安裝 Microsoft Azure 計算模擬器,當您啟動儲存體模擬器時,就會出現系統匣圖示。 右鍵點擊圖示即可顯示一個選單,提供圖形化方式來啟動與停止儲存模擬器。

命令列語法

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

選項

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

選項 描述: 命令 引數
啟動 啟動儲存模擬器。 AzureStorageEmulator.exe start [-inprocess] -inprocess:在目前程序中啟動模擬器,而非建立新程序。
停止 停止儲存體模擬器。 AzureStorageEmulator.exe stop
狀態 列印儲存體模擬器的狀態。 AzureStorageEmulator.exe status
Clear 清除命令列上指定的所有服務中的資料。 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 版起,Storage Emulator 帳戶支援唯讀存取異地備援儲存體(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 的快照,但服務會傳回失敗。
  • Get Page Ranges Diff 無法在使用 Incremental Copy 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.Guid 或 Edm.Binary 的屬性只支援查詢篩選字串中的 Equal (eq) 與 NotEqual (ne) 比較運算子。

佇列儲存體的差異

在模擬器中,佇列儲存體沒有任何特有的差異。

儲存體模擬器版本資訊

版本 5.10

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

5.9 版

  • Storage Emulator 不會拒絕 Blob、Queue 和 Table 服務端點的 2019-02-02 版本儲存服務。

5.8 版

  • Storage Emulator 不會拒絕 Blob、Queue 和 Table 服務端點的 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、Queue 和 Table 服務端點的 2015-12-11 版儲存體服務。
  • 現在,Storage Emulator 在處理大量 Blob 時,對 Blob 資料進行垃圾回收的效率更高。
  • 修正了造成容器 ACL XML 的驗證方式與儲存體服務的運作方式稍有不同的錯誤。
  • 修正了有時造成報告的日期時間上限和下限值時區不正確的錯誤。

版本 4.3

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

4.2 版

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

4.1 版

  • 儲存體模擬器現在支援 Blob、佇列和資料表服務端點上 2015-02-21 版的儲存體服務。 不支援新的 Append Blob 功能。
  • 模擬器現在會針對不支援的儲存體服務版本傳回有意義的錯誤訊息。 使用最新版本的模擬器。 如果您遇到 VersionNotSupportedByEmulator 錯誤 (HTTP 狀態碼 400 - 不正確的要求),請下載最新版的模擬器。
  • 修正了一個錯誤,即在並行合併操作中,競賽條件導致資料表實體資料錯誤。

4.0 版

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

3.2 版

  • 儲存體模擬器現在支援 Blob、Queue 和 Table 服務端點上的儲存體服務 2014-02-14 版本。 儲存體模擬器目前不支援檔案服務端點。 如需 2014-02-14 版本的詳細資訊,請參閱 Azure 儲存體服務的版本設定。

3.1 版本

  • 儲存模擬器現在支援唯讀存取地理冗餘儲存(RA-GRS)。 它支援帳戶次要位置的 Get Blob Service Stats、Get Queue Service Stats 和 Get Table Service Stats API,並且一律依據底層 SQL 資料庫,將 LastSyncTime 回應元素的值作為目前時間傳回。 如需以程式設計方式使用儲存體模擬器來存取次要位置,請使用適用於 .NET 的儲存體用戶端程式庫 3.2 版或更新版本。 欲了解更多資訊,請參閱 .NET 的 Azure 儲存體 用戶端函式庫。

3.0 版

  • Azure 儲存體 模擬器不再與計算模擬器同包中。
  • 儲存體模擬器圖形化使用者介面已淘汰。 Microsoft 則以可腳本命令列介面取代。 關於命令列介面的詳細資訊,請參見 儲存模擬器 Command-Line 工具參考。 圖形介面保留在 3.0 版本,但只有安裝 Compute Emulator 後才能使用。 要進入它,請右鍵點選系統托盤圖示,選擇 「顯示儲存模擬器 UI」。
  • 儲存模擬器現已完全支援 Azure 儲存服務版本2013-08-15。 (此版本先前僅支援 Storage Emulator 2.2.1 預覽版。)

下一步

另請參閱