Bagikan melalui


Menambahkan sinkronisasi data offline ke aplikasi Avalonia Anda

Tutorial ini mencakup fitur sinkronisasi offline Azure Mobile Apps untuk aplikasi mulai cepat Avalonia. Sinkronisasi offline memungkinkan pengguna akhir untuk berinteraksi dengan aplikasi seluler—melihat, menambahkan, atau memodifikasi data—bahkan ketika tidak ada koneksi jaringan. Perubahan disimpan di dalam database lokal. Setelah perangkat kembali online, perubahan ini disinkronkan dengan backend jarak jauh.

Sebelum memulai tutorial ini, Anda harus menyelesaikan Tutorial Mulai Cepat Avalonia, yang mencakup pembuatan layanan backend yang sesuai. Kami juga berasumsi Anda telah menambahkan autentikasi ke aplikasi Anda. Anda dapat menambahkan kemampuan offline ke aplikasi tanpa autentikasi.

Perbarui aplikasi untuk mendukung sinkronisasi offline

Dalam operasi online, Anda membaca ke dan menulis dari IRemoteTable<T>. Saat menggunakan sinkronisasi offline, Anda membaca ke dan menulis dari IOfflineTable<T> sebagai gantinya. IOfflineTable<T> didukung oleh database SQLite di perangkat, dan disinkronkan dengan database backend.

Menambahkan paket NuGet yang diperlukan

Di Visual Studio:

  1. Klik kanan pada TodoApp solusi, lalu pilih Kelola Paket NuGet untuk Solusi....

  2. Di tab baru, pilih Telusuri, lalu masukkan Microsoft.Datasync.Client di kotak pencarian.

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Pilih paket Microsoft.Datasync.Client.SQLiteStore.

  4. Di panel kanan, pilih semua proyek klien (kecuali TodoAppService.NET6 proyek).

  5. Pilih Instal.

  6. Terima perjanjian lisensi saat diminta.

Memperbarui klien layanan jarak jauh

TodoApp.Data Buka proyek dan temukan RemoteTodoService.cs kelas (dalam Services direktori). Perbarui kelas sebagai berikut:

  1. Tambahkan pernyataan berikut using ke bagian atas file:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Ubah definisi _table menjadi :IOfflineTable<TodoItem>

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Tambahkan properti baru untuk menyimpan lokasi database offline:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. InitializeAsync Perbarui metode untuk menentukan database offline:

    // 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() Perbarui untuk melakukan sinkronisasi offline:

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

Mengatur lokasi database offline

TodoApp.AvaloniaUI Dalam proyek, edit MainWindowViewModel.cs file di ViewModels folder . Ubah definisi RemoteTodoService sebagai berikut:

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

Jika Anda belum menyelesaikan tutorial autentikasi, definisi akan terlihat seperti ini sebagai gantinya:

TodoService = new RemoteTodoService()
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};

Catatan

Anda dapat menyimpan database offline di mana pun Anda memiliki izin baca/tulis/buat pada sistem Windows. Kelas Environment.SpecialFolder ini memberikan lokasi standar sesuai dengan aplikasi.

Menguji aplikasi

Aplikasi tidak disinkronkan dengan backend hingga ikon refresh ditekan. Untuk menguji:

  1. Buka portal Microsoft Azure.

  2. Buka grup sumber daya yang berisi sumber daya untuk mulai cepat.

  3. quickstart Pilih database.

  4. Pilih editor Kueri (pratinjau).

  5. Masuk dengan autentikasi server SQL menggunakan kredensial yang sama dengan yang Anda siapkan untuk database.

    • Jika perlu, Anda akan diminta untuk mengizinkan akses untuk alamat IP Anda. Pilih tautan untuk memperbarui daftar yang diizinkan, lalu tekan OK untuk mencoba kembali login.
  6. Di editor kueri, masukkan SELECT * FROM [dbo].[TodoItems]. Lalu pilih Jalankan.

Daftar TodoItems saat ini akan ditampilkan.

Screenshot of the results in the S Q L query editor.

Sekarang, buat beberapa perubahan melalui aplikasi Anda. JANGAN TEKAN REFRESH (belum).

Ulangi pernyataan SQL dalam portal Azure dan verifikasi bahwa tidak ada perubahan yang dilakukan pada data dalam database.

Pilih ikon Refresh di aplikasi Anda untuk mendorong data dalam antrean ke layanan backend. Anda akan melihat transaksi HTTP yang terjadi di jendela Debug Output.

Ulangi pernyataan SQL di portal Azure dan verifikasi bahwa perubahan Anda telah didorong ke layanan jarak jauh.

Membersihkan sumber daya

Kecuali Anda melakukan tutorial mulai cepat lainnya, Anda dapat menghapus sumber daya yang terkait dengan layanan backend sekarang.

  1. Buka portal Microsoft Azure.
  2. Pilih grup sumber daya yang menyimpan sumber daya mulai cepat.
  3. Pilih Hapus grup sumber daya.
  4. Ikuti instruksi untuk mengonfirmasi penghapusan.

Anda juga dapat menggunakan Azure CLI:

az group delete -g quickstart

Jika Anda menggunakan Azure Developer CLI untuk menyebarkan sumber daya, Anda dapat menggunakan perintah sebagai gantinya azd down .

Penghapusan akan memakan waktu beberapa menit untuk diselesaikan.

Langkah berikutnya