Dela via


Lägga till datasynkronisering offline i .NET MAUI-appen

Not

Den här produkten har dragits tillbaka. En ersättning för projekt som använder .NET 8 eller senare finns i Community Toolkit Datasync-biblioteket.

Den här självstudien beskriver funktionen för offlinesynkronisering i Azure Mobile Apps för .NET MAUI. Med offlinesynkronisering kan slutanvändarna interagera med en mobilapp även om det inte finns någon nätverksanslutning. Ändringar lagras i en lokal databas. När enheten är online igen synkroniseras dessa ändringar med fjärrserverdelen.

Innan du påbörjar den här självstudien bör du ha slutfört .NET MAUI-snabbstartsguiden, vilket innefattar att skapa en lämplig serverdelstjänst.

Mer information om funktionen för offlinesynkronisering finns i avsnittet Offline Data Sync i Azure Mobile Apps.

Uppdatera appen för att stödja offlinesynkronisering

I onlineåtgärden läser du till och skriver från en IRemoteTable<T>. När du använder offlinesynkronisering läser du till och skriver från en IOfflineTable<T> i stället. IOfflineTable backas upp av en SQLite-databas på enheten och synkroniseras med serverdelsdatabasen.

I Visual Studio:

  1. Högerklicka på den TodoApp lösningen och välj sedan Hantera NuGet-paket för lösning....

  2. På den nya fliken väljer du Bläddraoch anger sedan Microsoft.Datasync.Client i sökrutan.

    Skärmbild av att lägga till nuGet offline i Visual Studio.

  3. Välj det Microsoft.Datasync.Client.SQLiteStore paketet.

  4. I den högra rutan väljer du alla klientprojekt (förutom det TodoAppService.NET6 projektet).

  5. Välj Installera.

  6. Godkänn licensavtalet när du uppmanas att göra det.

Uppdatera fjärrtjänstklienten

Öppna TodoApp.Data-projektet och leta upp klassen RemoteTodoService.cs (i katalogen Services). Uppdatera klassen enligt följande:

  1. Lägg till följande using-instruktion överst i filen:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Ändra definitionen av _table till en IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Lägg till en ny egenskap för lagring av offlinedatabasplatsen:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. Uppdatera metoden InitializeAsync för att definiera offlinedatabasen:

    // 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. Uppdatera RefreshItemsAsync() för att utföra offlinesynkronisering:

    /// <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;
    }
    

Ange platsen för offlinedatabasen

I TodoApp.MAUI-projektet redigerar du filen MainPage.xaml.cs. Ändra definitionen av RemoteTodoService enligt följande:

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

Om du inte har slutfört självstudien om autentiseringbör definitionen se ut så här i stället:

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

Testa appen

Appen synkroniseras inte med serverdelen förrän uppdateringsikonen trycks ner. Så här testar du:

  1. Öppna Azure-portalen.

  2. Öppna den resursgrupp som innehåller resurserna för snabbstarten.

  3. Välj den quickstart databasen.

  4. Välj Frågeredigeraren (förhandsversion).

  5. Logga in med SQL Server-autentisering med samma autentiseringsuppgifter som du har konfigurerat för databasen.

    • Om det behövs uppmanas du att tillåta åtkomst för din IP-adress. Välj länken för att uppdatera listan över tillåtna och tryck sedan på OK för att försöka logga in igen.
  6. I frågeredigeraren anger du SELECT * FROM [dbo].[TodoItems]. Välj sedan Kör.

En lista över aktuella TodoItems visas.

Skärmbild av resultatet i S Q L-frågeredigeraren.

Gör nu några ändringar via din app. TRYCK INTE PÅ UPPDATERA (ännu).

Upprepa SQL-instruktionen i Azure-portalen och kontrollera att inga ändringar har gjorts i data i databasen.

Välj ikonen Uppdatera i appen för att skicka data i kön till serverdelstjänsten. Http-transaktionerna visas i fönstret Utdatafelsökning.

Upprepa SQL-instruktionen i Azure-portalen och kontrollera att ändringarna har överförts till fjärrtjänsten.

Rensa resurser

Om du inte gör en ny snabbstartsguide kan du ta bort de resurser som är associerade med serverdelstjänsten nu.

  1. Öppna Azure-portalen.
  2. Välj den resursgrupp som innehåller snabbstartsresurserna.
  3. Välj Ta bort resursgrupp.
  4. Följ anvisningarna för att bekräfta borttagningen.

Du kan också använda Azure CLI:

az group delete -g quickstart

Om du använde Azure Developer CLI för att distribuera resurser kan du använda kommandot azd down i stället.

Borttagningen tar några minuter att slutföra.

Nästa steg