共用方式為


為您的 Windows 應用程式啟用離線同步處理

概觀

本教學課程說明如何使用 Azure 行動應用程式後端,將離線支援新增至通用 Windows 平臺 (UWP) 應用程式。 離線同步處理可讓使用者與行動應用程式互動--檢視、新增或修改數據,即使沒有網路連線也是如此。 變更會儲存在本機資料庫中。 裝置重新上線后,這些變更會與遠端後端同步。

在本教學課程中,您會從 建立 Windows 應用程式 教學課程更新 UWP 應用程式專案,以支援 Azure Mobile Apps 的離線功能。 如果您未使用下載的快速入門伺服器專案,您必須將資料存取延伸模組套件新增至專案。 如需伺服器擴充套件的詳細資訊,請參閱 使用適用於 Azure Mobile Apps 的 .NET 後端伺服器 SDK

若要深入瞭解離線同步功能,請參閱在 Azure Mobile Apps 中 離線數據同步主題。

需求

本教學課程需要下列必要條件:

更新用戶端應用程式以支援離線功能

當您處於離線案例時,Azure 行動應用程式離線功能可讓您與本機資料庫互動。 若要在應用程式中使用這些功能,請將 SyncContext 初始化為本地存儲。 然後透過 IMobileServiceSyncTable 介面來參考您的資料表。 SQLite 會當做裝置上的本地存儲使用。

  1. 安裝 通用 Windows 平臺的 SQLite 執行時間

  2. 在 Visual Studio 中,開啟您在 建立 Windows 應用程式 教學課程中完成之 UWP 應用程式專案的 NuGet 套件管理員。 搜尋並安裝 Microsoft.Azure.Mobile.Client.SQLiteStore NuGet 套件。

  3. 在 [方案總管] 中,以滑鼠右鍵按兩下 [ 參考>新增參考...>通用 Windows>擴充功能,然後 針對通用 Windows 平臺Visual C++ 2015 Runtime for Universal Windows Platform 應用程式啟用 SQLite。

    新增 SQLite UWP 參考

  4. 開啟 MainPage.xaml.cs 檔案並將 #define OFFLINE_SYNC_ENABLED 標籤取消註解。

  5. 在 Visual Studio 中,按 F5 鍵來重建並執行用戶端應用程式。 應用程式的運作方式與啟用離線同步處理之前的運作方式相同。不過,本機資料庫現在會填入可在離線案例中使用的數據。

更新應用程式以中斷與後端的連線

在本節中,您會中斷行動應用程式後端的連線,以模擬脫機情況。 當您新增數據項時,例外狀況處理程式會告訴您應用程式處於離線模式。 在此狀態下,當新增專案到本地儲存時,這些專案將會在下一次以連線狀態執行推送時,與行動應用程式後端同步。

  1. 編輯共享專案中App.xaml.cs。 註解掉 MobileServiceClient 的初始化,並新增下列這一行,其中使用無效的行動應用程式URL:

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    您也可以藉由停用裝置上的wifi和行動數據網路或使用飛機模式來示範離線行為。

  2. F5 來建置並執行應用程式。 請注意,應用程式啟動時,您的同步在刷新時失敗。

  3. 輸入新項目,並注意每次按下 [儲存] 時,推送會失敗,並出現 CancelledByNetworkError 狀態。 不過,新的待辦事項項目存在於本地存儲中,直到可以推送至行動應用程式後端為止。 在生產應用程式中,如果您隱藏這些例外狀況,用戶端應用程式的行為就如同它仍然連線到行動應用程式後端一樣。

  4. 關閉應用程式,然後重新啟動它,以確認您所建立的新專案會保存至本地存儲。

  5. (選擇性)在 Visual Studio 中,開啟 [伺服器總管]。 瀏覽至 Azure 中的資料庫->SQL 資料庫。 以滑鼠右鍵按下您的資料庫,然後選取 [在 SQL Server 物件總管中開啟] 。 現在您可以瀏覽至 SQL 資料庫資料表及其內容。 確認後端資料庫中的數據尚未變更。

  6. (選擇性)使用 Fiddler 或 Postman 等 REST 工具來查詢您的行動後端,並使用格式為 https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem的 GET 查詢。

更新應用程式以重新連線行動應用程式後端

在本節中,您會將應用程式重新連線到行動應用程式後端。 這些變更會模擬應用程式上的網路重新連線。

當您第一次執行應用程式時,OnNavigatedTo 事件處理程式會呼叫 InitLocalStoreAsync。 這個方法接著會呼叫 SyncAsync ,以同步處理您的本地存儲與後端資料庫。 應用程式會在啟動時嘗試同步處理。

  1. 在共用項目中開啟 App.xaml.cs,並移除您先前在 MobileServiceClient 上的註解,以使用正確的行動應用程式 URL。

  2. F5 鍵以重建並執行應用程式。 應用程式會在OnNavigatedTo 事件處理常式執行時,使用推送與拉取操作來同步本機變更與 Azure 行動應用程式後端。

  3. (選擇性)使用 SQL Server 物件總管或 Fiddler 等 REST 工具檢視更新的數據。 注意,Azure 行動應用的後端的資料庫與本地儲存之間數據已同步。

  4. 在應用程式中,點擊幾個項目旁邊的複選框,以在當地商店完成這些項目。

    UpdateCheckedTodoItem 呼叫 SyncAsync,以同步處理每個已完成的專案與行動應用程式後端。 SyncAsync 調用 push 和 pull。 不過, 當您針對用戶端已變更的數據表執行提取時,一律會自動執行推送。 此行為可確保本地存儲中的所有數據表及其關聯保持一致。 此行為可能會導致非預期的推動。 如需此行為的詳細資訊,請參閱在 Azure Mobile Apps 離線數據同步。

API 摘要

為了支援行動服務的離線功能,我們使用 IMobileServiceSyncTable 介面,並使用本機 SQLite 資料庫初始化 MobileServiceClient.SyncContext 。 離線時,Mobile Apps 的一般 CRUD 作業仍然會如同應用程式在連線時針對本地儲存進行作業一般運行。 下列方法可用來同步化本地存儲與伺服器:

  • PushAsync 因為此方法是 IMobileServicesSyncContext 的成員,因此所有數據表的變更都會推送至後端。 只有具有本機變更的記錄會傳送至伺服器。
  • PullAsync 提取是從 IMobileServiceSyncTable 啟動。 當數據表中有追蹤的變更時,會執行隱含推送,以確保本地存儲中的所有數據表以及關聯性保持一致。 pushOtherTables 參數會控制內容中的其他數據表是否在隱含推送中推送。 查詢參數會採用IMobileServiceTableQuery<T> 或 OData 查詢字串來篩選傳回的數據。 queryId 參數可用來定義累加同步處理。如需詳細資訊,請參閱 Azure Mobile Apps 中的離線數據同步
  • PurgeAsync 您的應用程式應該定期呼叫此方法,以從本地存儲清除過時的數據。 當您需要清除尚未同步處理的任何變更時,請使用 force 參數。

如需這些概念的詳細資訊,請參閱 Azure Mobile Apps 中的離線數據同步

詳細資訊

下列主題提供 Mobile Apps 離線同步功能的其他背景資訊: