Поделиться через


Добавление автономной синхронизации данных в приложение .NET MAUI

Заметка

Этот продукт отставлен. Сведения о замене проектов с помощью .NET 8 или более поздней версии см. вбиблиотеке Community Toolkit Datasync.

В этом руководстве рассматривается функция автономной синхронизации мобильных приложений Azure для .NET MAUI. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением, даже если сетевого подключения нет. Изменения хранятся в локальной базе данных. После возврата устройства эти изменения синхронизируются с удаленной серверной частью.

Перед началом работы с этим руководством необходимо выполнить краткое руководство по .NET MAUI,, включающее создание подходящей серверной службы.

Дополнительные сведения о функции автономной синхронизации см. в статье автономной синхронизации данных в мобильных приложениях Azure.

Обновление приложения для поддержки автономной синхронизации

В оперативной операции вы читаете и записываете данные из IRemoteTable<T>. При использовании автономной синхронизации вместо этого выполняется чтение и запись из IOfflineTable<T>. IOfflineTable поддерживается базой данных SQLite на устройстве и синхронизирована с серверной базой данных.

В Visual Studio:

  1. Щелкните правой кнопкой мыши решение TodoApp, а затем выберите Управление пакетами NuGet для решения....

  2. На новой вкладке выберите Обзор, а затем в поле поиска введите Microsoft.Datasync.Client.

    снимок экрана: добавление автономного NuGet в Visual Studio.

  3. Выберите пакет Microsoft.Datasync.Client.SQLiteStore.

  4. В правой области выберите все клиентские проекты (кроме проекта TodoAppService.NET6).

  5. Выберите Установить.

  6. Примите лицензионное соглашение при появлении запроса.

Обновление клиента удаленной службы

Откройте проект TodoApp.Data и найдите класс RemoteTodoService.cs (в каталоге Services). Обновите класс следующим образом:

  1. Добавьте следующую инструкцию using в начало файла:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Измените определение _table на IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Добавьте новое свойство для хранения расположения автономной базы данных:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Обновите метод 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;
    
  5. Обновите 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.MAUI измените файл MainPage.xaml.cs. Измените определение RemoteTodoService следующим образом:

TodoService = new RemoteTodoService(GetAuthenticationToken)
{
    OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};

Если вы еще не выполнили руководство по проверке подлинности , это определение должно выглядеть следующим образом:

TodoService = new RemoteTodoService()
{
    OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};

Тестирование приложения

Приложение не синхронизируется с серверной частью до нажатия значка обновления. Чтобы проверить:

  1. Откройтепортала Azure .

  2. Откройте группу ресурсов, содержащую ресурсы для краткого руководства.

  3. Выберите базу данных quickstart.

  4. Выберите редактор запросов (предварительная версия).

  5. Войдите с помощью проверки подлинности SQL Server, используя те же учетные данные, которые вы настроили для базы данных.

    • При необходимости вам будет предложено разрешить доступ к IP-адресу. Выберите ссылку, чтобы обновить список разрешений, а затем нажмите кнопку ОК, чтобы повторить вход.
  6. В редакторе запросов введите SELECT * FROM [dbo].[TodoItems]. Затем выберите Запустить.

Отобразится список текущих TodoItems.

снимок экрана: результаты в редакторе запросов S Q L.

Теперь внесите некоторые изменения в приложение. ПОКА НЕ НАЖИМАЙТЕ КНОПКУ ОБНОВЛЕНИЯ (пока).

Повторите инструкцию SQL на портале Azure и убедитесь, что изменения не были внесены в данные в базе данных.

Щелкните значок Обновить в приложении, чтобы отправить данные в очередь в серверную службу. Вы увидите http-транзакции, происходящие в окне отладки вывода.

Повторите инструкцию SQL на портале Azure и убедитесь, что изменения были отправлены в удаленную службу.

Очистка ресурсов

Если вы не выполняете другое краткое руководство по началу работы, вы можете удалить ресурсы, связанные с серверной службой.

  1. Откройтепортала Azure .
  2. Выберите группу ресурсов, содержащую ресурсы быстрого запуска.
  3. Выберите Удалить группу ресурсов.
  4. Следуйте инструкциям, чтобы подтвердить удаление.

Вы также можете использовать Azure CLI:

az group delete -g quickstart

Если вы использовали интерфейс командной строки разработчика Azure для развертывания ресурсов, вы можете использовать вместо этого команду azd down.

Удаление займет несколько минут.

Дальнейшие действия