概述
本教程介绍如何使用 Azure 移动应用后端向通用 Windows 平台(UWP)应用添加脱机支持。 脱机同步允许最终用户与移动应用交互-查看、添加或修改数据-即使没有网络连接也是如此。 更改存储在本地数据库中。 设备重新联机后,这些更改会与远程后端同步。
在本教程中,你将从教程 “创建 Windows 应用” 更新 UWP 应用项目,以支持 Azure 移动应用的脱机功能。 如果不使用下载的快速入门服务器项目,则必须将数据访问扩展包添加到项目中。 有关服务器扩展包的详细信息,请参阅 使用适用于 Azure 移动应用的 .NET 后端服务器 SDK。
若要了解有关脱机同步功能的详细信息,请参阅主题 Azure 移动应用中的脱机数据同步。
要求
本教程需要以下先决条件:
- 在 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>,然后启用SQLite for Universal Windows Platform和>。
打开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 数据库表及其内容。 验证后端数据库中的数据没有改变。
(可选)使用 REST 工具(如 Fiddler 或 Postman)通过表单
https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem中的 GET 查询来查询移动后端。
更新应用以重新连接移动应用后端
在本部分中,将应用重新连接到移动应用后端。 这些更改模拟出应用上的网络重新连接。
首次运行应用程序时, OnNavigatedTo 事件处理程序将调用 InitLocalStoreAsync。 此方法又调用 SyncAsync 将本地存储与后端数据库同步。 应用尝试在启动时同步。
在共享项目中打开 App.xaml.cs,取消注释之前的初始化
MobileServiceClient,以便使用正确的移动应用程序 URL。按 F5 键重新生成并运行应用。 当
OnNavigatedTo事件处理程序执行时,应用程序使用推送和拉取操作将你的本地更改与 Azure 移动应用后端同步。(可选)使用 SQL Server 对象资源管理器或 REST 工具(如 Fiddler)查看更新的数据。 请注意,数据已在 Azure 移动应用后端数据库和本地存储之间同步。
在应用中,点击几个项目旁边的复选框,以便在当地商店完成这些操作。
UpdateCheckedTodoItem调用SyncAsync以将每个已完成的项与移动应用后端同步。SyncAsync调用推送和拉取。 但是, 每当对客户端已更改的表执行拉取时,始终会自动执行推送。 此行为确保本地存储中的所有表及其关系保持一致性。 此行为可能会导致意外的推动。 有关此行为的详细信息,请参阅 Azure 移动应用中的脱机数据同步。
API 摘要
为了支持移动服务的脱机功能,我们使用了 IMobileServiceSyncTable 接口,并使用本地 SQLite 数据库初始化了 MobileServiceClient.SyncContext 。 脱机时,移动应用的正常 CRUD 操作就像应用仍然连接一样,操作是在本地存储上进行的。 以下方法用于将本地存储与服务器同步:
- PushAsync 由于此方法是 IMobileServicesSyncContext 的成员,因此所有表的更改将推送到后端。 只有具有本地更改的记录才会发送到服务器。
- PullAsync 拉取是从 IMobileServiceSyncTable 开始的。 当表中存在跟踪的更改时,将运行隐式推送,以确保本地存储中的所有表以及关系保持一致。 pushOtherTables 参数控制在隐式推送过程中,是否推入上下文中的其他表。 查询参数采用 IMobileServiceTableQuery<T> 或 OData 查询字符串来筛选返回的数据。 queryId 参数用于定义增量同步。有关详细信息,请参阅 Azure 移动应用中的脱机数据同步。
- PurgeAsync 应用应定期调用此方法以清除本地存储中的过时数据。 需要清除尚未同步的任何更改时,请使用 force 参数。
有关这些概念的详细信息,请参阅 Azure 移动应用中的脱机数据同步。
详细信息
以下主题提供有关移动应用的脱机同步功能的其他背景信息:
- 在 Azure 移动应用 中 脱机数据同步
- Azure 移动应用 .NET SDK HOWTO