概述
本教程介绍如何使用 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