概觀
本教學課程說明如何使用 Azure 行動應用程式後端,將離線支援新增至通用 Windows 平臺 (UWP) 應用程式。 離線同步處理可讓使用者與行動應用程式互動--檢視、新增或修改數據,即使沒有網路連線也是如此。 變更會儲存在本機資料庫中。 裝置重新上線后,這些變更會與遠端後端同步。
在本教學課程中,您會從 建立 Windows 應用程式 教學課程更新 UWP 應用程式專案,以支援 Azure Mobile Apps 的離線功能。 如果您未使用下載的快速入門伺服器專案,您必須將資料存取延伸模組套件新增至專案。 如需伺服器擴充套件的詳細資訊,請參閱 使用適用於 Azure Mobile Apps 的 .NET 後端伺服器 SDK。
若要深入瞭解離線同步功能,請參閱在 Azure Mobile Apps 中 離線數據同步主題。
需求
本教學課程需要下列必要條件:
- 在 Windows 8.1 或更新版本上執行的 Visual Studio 2013。
- 完成建立 Windows 應用程式。
- Azure 行動服務 SQLite 市集
- 適用於通用 Windows 平台開發的 SQLite
更新用戶端應用程式以支援離線功能
當您處於離線案例時,Azure 行動應用程式離線功能可讓您與本機資料庫互動。 若要在應用程式中使用這些功能,請將 SyncContext 初始化為本地存儲。 然後透過 IMobileServiceSyncTable 介面來參考您的資料表。 SQLite 會當做裝置上的本地存儲使用。
在 Visual Studio 中,開啟您在 建立 Windows 應用程式 教學課程中完成之 UWP 應用程式專案的 NuGet 套件管理員。 搜尋並安裝 Microsoft.Azure.Mobile.Client.SQLiteStore NuGet 套件。
在 [方案總管] 中,以滑鼠右鍵按兩下 [ 參考>新增參考...>通用 Windows>擴充功能,然後 針對通用 Windows 平臺 和 Visual C++ 2015 Runtime for Universal Windows Platform 應用程式啟用 SQLite。
開啟 MainPage.xaml.cs 檔案並將
#define OFFLINE_SYNC_ENABLED標籤取消註解。在 Visual Studio 中,按 F5 鍵來重建並執行用戶端應用程式。 應用程式的運作方式與啟用離線同步處理之前的運作方式相同。不過,本機資料庫現在會填入可在離線案例中使用的數據。
更新應用程式以中斷與後端的連線
在本節中,您會中斷行動應用程式後端的連線,以模擬脫機情況。 當您新增數據項時,例外狀況處理程式會告訴您應用程式處於離線模式。 在此狀態下,當新增專案到本地儲存時,這些專案將會在下一次以連線狀態執行推送時,與行動應用程式後端同步。
編輯共享專案中App.xaml.cs。 註解掉 MobileServiceClient 的初始化,並新增下列這一行,其中使用無效的行動應用程式URL:
public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");您也可以藉由停用裝置上的wifi和行動數據網路或使用飛機模式來示範離線行為。
按 F5 來建置並執行應用程式。 請注意,應用程式啟動時,您的同步在刷新時失敗。
輸入新項目,並注意每次按下 [儲存] 時,推送會失敗,並出現 CancelledByNetworkError 狀態。 不過,新的待辦事項項目存在於本地存儲中,直到可以推送至行動應用程式後端為止。 在生產應用程式中,如果您隱藏這些例外狀況,用戶端應用程式的行為就如同它仍然連線到行動應用程式後端一樣。
關閉應用程式,然後重新啟動它,以確認您所建立的新專案會保存至本地存儲。
(選擇性)在 Visual Studio 中,開啟 [伺服器總管]。 瀏覽至 Azure 中的資料庫->SQL 資料庫。 以滑鼠右鍵按下您的資料庫,然後選取 [在 SQL Server 物件總管中開啟] 。 現在您可以瀏覽至 SQL 資料庫資料表及其內容。 確認後端資料庫中的數據尚未變更。
(選擇性)使用 Fiddler 或 Postman 等 REST 工具來查詢您的行動後端,並使用格式為
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem的 GET 查詢。
更新應用程式以重新連線行動應用程式後端
在本節中,您會將應用程式重新連線到行動應用程式後端。 這些變更會模擬應用程式上的網路重新連線。
當您第一次執行應用程式時,OnNavigatedTo 事件處理程式會呼叫 InitLocalStoreAsync。 這個方法接著會呼叫 SyncAsync ,以同步處理您的本地存儲與後端資料庫。 應用程式會在啟動時嘗試同步處理。
在共用項目中開啟 App.xaml.cs,並移除您先前在
MobileServiceClient上的註解,以使用正確的行動應用程式 URL。按 F5 鍵以重建並執行應用程式。 應用程式會在
OnNavigatedTo事件處理常式執行時,使用推送與拉取操作來同步本機變更與 Azure 行動應用程式後端。(選擇性)使用 SQL Server 物件總管或 Fiddler 等 REST 工具檢視更新的數據。 注意,Azure 行動應用的後端的資料庫與本地儲存之間數據已同步。
在應用程式中,點擊幾個項目旁邊的複選框,以在當地商店完成這些項目。
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 離線同步功能的其他背景資訊:
- Azure Mobile Apps 中的 離線數據同步
- Azure Mobile Apps .NET SDK HOWTO