Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заметка
Этот продукт отставлен. Сведения о замене проектов с помощью .NET 8 или более поздней версии см. в библиотекеCommunity Toolkit Datasync.
В этом руководстве рассматривается функция автономной синхронизации мобильных приложений Azure для Xamarin Forms. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевого подключения нет. Изменения хранятся в локальной базе данных. После возврата устройства эти изменения синхронизируются с удаленной серверной частью.
Перед началом работы с этим руководством необходимо выполнить краткого руководства по Xamarin.Forms, включающее создание подходящей серверной службы.
Дополнительные сведения о функции автономной синхронизации см. в статье автономной синхронизации данных в мобильных приложениях Azure.
Обновление приложения для поддержки автономной синхронизации
В оперативной операции вы читаете и записываете данные из IRemoteTable<T>. При использовании автономной синхронизации вместо этого выполняется чтение и запись из IOfflineTable<T>.
IOfflineTable поддерживается базой данных SQLite на устройстве и синхронизирована с серверной базой данных.
В Visual Studio:
Щелкните правой кнопкой мыши решение
TodoApp, а затем выберите Управление пакетами NuGet для решения....На новой вкладке выберите Обзор, а затем в поле поиска введите Microsoft.Datasync.Client.
Выберите пакет
Microsoft.Datasync.Client.SQLiteStore.В правой области выберите все клиентские проекты (кроме проекта
TodoAppService.NET6).Выберите Установить.
Примите лицензионное соглашение при появлении запроса.
Обновление клиента удаленной службы
Откройте проект TodoApp.Data и найдите класс RemoteTodoService.cs (в каталоге Services). Обновите класс следующим образом:
Добавьте следующую инструкцию
usingв начало файла:using Microsoft.Datasync.Client.SQLiteStore;Измените определение
_tableнаIOfflineTable<TodoItem>:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;Добавьте новое свойство для хранения расположения автономной базы данных:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }Обновите метод
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;Обновите
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.Forms измените файл App.xaml.cs. Измените определение RemoteTodoService следующим образом:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Если вы еще не выполнили руководство по проверке подлинности , это определение должно выглядеть следующим образом:
TodoService = new RemoteTodoService()
{
OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};
Тестирование приложения
Приложение не синхронизируется с серверной частью до нажатия значка обновления. Чтобы проверить:
Откройте портал Azure.
Откройте группу ресурсов, содержащую ресурсы для краткого руководства.
Выберите базу данных
quickstart.Выберите редактор запросов (предварительная версия).
Войдите с помощью проверки подлинности SQL Server, используя те же учетные данные, которые вы настроили для базы данных.
- При необходимости вам будет предложено разрешить доступ к IP-адресу. Выберите ссылку, чтобы обновить список разрешений, а затем нажмите кнопку ОК, чтобы повторить вход.
В редакторе запросов введите
SELECT * FROM [dbo].[TodoItems]. Затем выберите Выполнить.
Отобразится список текущих TodoItems.
Теперь внесите некоторые изменения в приложение. ПОКА НЕ НАЖИМАЙТЕ КНОПКУ ОБНОВЛЕНИЯ (пока).
Повторите инструкцию SQL на портале Azure и убедитесь, что изменения не были внесены в данные в базе данных.
Щелкните значок Обновить в приложении, чтобы отправить данные в очередь в серверную службу. Вы увидите http-транзакции, происходящие в окне отладки вывода.
Повторите инструкцию SQL на портале Azure и убедитесь, что изменения были отправлены в удаленную службу.
Очистка ресурсов
Если вы не выполняете другое краткое руководство по началу работы, вы можете удалить ресурсы, связанные с серверной службой.
- Откройте портал Azure.
- Выберите группу ресурсов, содержащую ресурсы быстрого запуска.
- Выберите Удалить группу ресурсов.
- Следуйте инструкциям, чтобы подтвердить удаление.
Вы также можете использовать Azure CLI:
az group delete -g quickstart
Если вы использовали интерфейс командной строки разработчика Azure для развертывания ресурсов, вы можете использовать вместо этого команду azd down.
Удаление займет несколько минут.
Дальнейшие действия
- Ознакомьтесь с документацией ПО ИСПОЛЬЗОВАНИЮ: