將離線資料同步新增至您的 Windows (UWP) 應用程式

本教學課程涵蓋適用於UWP快速入門應用程式的 Azure Mobile Apps 離線同步處理功能。 離線同步處理可讓使用者與行動應用程式互動—檢視、新增或修改數據,即使沒有網路連線也一起。 變更會儲存在本機資料庫中。 裝置重新上線后,這些變更會與遠端後端同步。

開始本教學課程之前,您應該已完成 UWP 快速入門教學課程,其中包括建立適當的後端服務。 我們也假設您已 將驗證 新增至您的應用程式。 您可以在不進行驗證的情況下,將離線功能新增至您的應用程式。

更新應用程式以支援離線同步處理

在線上作業中,您會從 IRemoteTable<T>讀取和寫入 。 使用離線同步處理時,您可以改為讀取 IOfflineTable<T> 與寫入 。 IOfflineTable<T>由裝置上的 SQLite 資料庫所支援,並與後端資料庫同步處理。

新增必要的 NuGet 套件

在 Visual Studio 中:

  1. 以滑鼠右鍵按兩下 TodoApp 方案,然後選取 [ 管理方案的 NuGet 套件...]。

  2. 在新的索引標籤中,選取 [流覽],然後在搜尋方塊中輸入 Microsoft.Datasync.Client

    Screenshot of adding the offline NuGet in Visual Studio.

  3. 選取套件 Microsoft.Datasync.Client.SQLiteStore

  4. 在右側窗格中,選取所有客戶端專案(專案除外 TodoAppService.NET6 )。

  5. 選取安裝

  6. 出現提示時,接受許可協定。

更新遠端服務用戶端

開啟專案並 TodoApp.Data 找出 RemoteTodoService.cs 類別 (在 Services 目錄中)。 更新類別,如下所示:

  1. 將下列 using 陳述式新增至檔案最上方:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. 將定義 _table 變更為 IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. 新增屬性以儲存離線資料庫位置:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. InitializeAsync更新 方法來定義離線資料庫:

    // Create the offline store definition
    var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString();
    var store = new OfflineSQLiteStore(connectionString);
    store.DefineTable<TodoItem>();
    var options = new DatasyncClientOptions
    {
        OfflineStore = store,
        HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() }
    };
    
    // Create the datasync client.
    _client = TokenRequestor == null 
        ? new DatasyncClient(Constants.ServiceUri, options)
        : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options);
    
    // Initialize the database
    await _client.InitializeOfflineStoreAsync();
    
    // Get a reference to the offline table.
    _table = _client.GetOfflineTable<TodoItem>();
    
    // Set _initialized to true to prevent duplication of locking.
    _initialized = true;
    
  5. RefreshItemsAsync()更新以執行離線同步處理:

    /// <summary>
    /// Refreshes the TodoItems list manually.
    /// </summary>
    /// <returns>A task that completes when the refresh is done.</returns>
    public async Task RefreshItemsAsync()
    {
        await InitializeAsync();
    
        // First, push all the items in the table.
        await _table.PushItemsAsync();
    
        // Then, pull all the items in the table.
        await _table.PullItemsAsync();
    
        return;
    }
    

設定離線資料庫位置

TodoApp.UWP 專案中,編輯 App.xaml.cs 檔案。 變更 的定義 RemoteTodoService ,如下所示:

TodoService = new RemoteTodoService(GetAuthenticationToken)
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

如果您尚未完成 驗證教學課程,則定義應該如下所示:

TodoService = new RemoteTodoService()
{
    OfflineDb = ApplicationData.Current.LocalCacheFolder.Path + "\\offline.db"
};

如果 ApplicationData 無法辨識,您可能需要將下列內容新增至檔案頂端:

using Windows.Storage;

注意

通用 Windows 平台 會限制您可以讀取和寫入數據的位置。 您可以在 中使用 ApplicationData.Current任何記憶體資料夾。 如果您要確保資料可供使用,但無法備份至雲端,請使用 LocalCacheFolder

測試應用程式

在按下重新整理圖示之前,應用程式不會與後端同步處理。 若要測試:

  1. 開啟 Azure 入口網站

  2. 開啟包含快速入門資源的資源群組。

  3. quickstart選取資料庫。

  4. 選取 [查詢編輯器] [預覽]。

  5. 使用您為資料庫設定的相同認證登入 SQL Server 驗證。

    • 如有必要,系統會提示您允許存取您的IP位址。 選取連結以更新允許清單,然後按 [確定 ] 重試登入。
  6. 在 [查詢編輯器] 中輸入 SELECT * FROM [dbo].[TodoItems]。 然後,選取 [執行]

將會顯示目前 TodoItems 的清單。

Screenshot of the results in the S Q L query editor.

現在,透過您的應用程式進行一些變更。 請勿按 [重新整理 ] (尚未)。

在 Azure 入口網站 中重複 SQL 語句,並確認資料庫中的數據沒有任何變更。

選取您應用程式上的 [ 重新 整理] 圖示,將佇列中的數據推送至後端服務。 您會看到 [輸出偵錯] 視窗中發生的 HTTP 交易。

在 Azure 入口網站 中重複 SQL 語句,並確認您的變更已推送至遠端服務。

清除資源

除非您正在執行另一個快速入門教學課程,否則您現在可以刪除與後端服務相關聯的資源。

  1. 開啟 Azure 入口網站
  2. 選取包含快速入門資源的資源群組。
  3. 選取 [刪除資源群組]
  4. 請依照指示確認刪除。

您也可以使用 Azure CLI:

az group delete -g quickstart

如果您使用 Azure 開發人員 CLI 來部署資源,您可以改用 azd down 命令。

刪除需要幾分鐘的時間才能完成。

下一步