Aracılığıyla paylaş


Windows (WPF) uygulamanıza çevrimdışı veri eşitleme ekleme

Not

Bu ürün kullanımdan kaldırıldı. .NET 8 veya üzerini kullanan projelerin yerini alması için bkz. Community Toolkit Datasync kitaplığı.

Bu öğretici, WPF hızlı başlangıç uygulaması için Azure Mobile Apps'in çevrimdışı eşitleme özelliğini kapsar. Çevrimdışı eşitleme, ağ bağlantısı olmadığında bile son kullanıcıların bir mobil uygulamayla (verileri görüntüleme, ekleme veya değiştirme) etkileşim kurmasına olanak tanır. Değişiklikler yerel veritabanında depolanır. Cihaz yeniden çevrimiçi olduktan sonra bu değişiklikler uzak arka uçla eşitlenir.

Bu öğreticiye başlamadan önce, uygun bir arka uç hizmeti oluşturmayı içerenWPF Hızlı Başlangıç Öğreticisi'ni tamamlamış olmanız gerekir. Ayrıca uygulamanıza kimlik doğrulaması eklediğinizi varsayalım. Uygulamanıza kimlik doğrulaması olmadan çevrimdışı özellikler ekleyebilirsiniz.

Uygulamayı çevrimdışı eşitlemeyi destekleyecek şekilde güncelleştirme

Çevrimiçi işlemde, bir IRemoteTable<T>için okuma ve yazma işlemleri gerçekleştirmeniz gerekir. Çevrimdışı eşitlemeyi kullanırken, bunun yerine bir IOfflineTable<T> okuma ve yazma işlemi yapılır. IOfflineTable<T> bir cihaz içi SQLite veritabanı tarafından yedeklenir ve arka uç veritabanıyla eşitlenir.

Gerekli NuGet paketlerini ekleme

Visual Studio'da:

  1. çözümüne sağ tıklayın ve çözüm için NuGet Paketlerini Yönet...seçin.

  2. Yeni sekmedeGözat'ı seçin ve arama kutusuna Microsoft.Datasync.Client girin.

    Visual Studio'da çevrimdışı NuGet ekleme işleminin ekran görüntüsü.

  3. Microsoft.Datasync.Client.SQLiteStore paketini seçin.

  4. Sağ bölmede tüm istemci projelerini (TodoAppService.NET6 proje hariç) seçin.

  5. yükle'yi seçin.

  6. İstendiğinde lisans sözleşmesini kabul edin.

Uzak hizmet istemcisini güncelleştirme

TodoApp.Data projesini açın ve RemoteTodoService.cs sınıfını bulun (Services dizininde). sınıfını aşağıdaki gibi güncelleştirin:

  1. Dosyanın en üstüne aşağıdaki using deyimini ekleyin:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. _table tanımını IOfflineTable<TodoItem>olacak şekilde değiştirin:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Çevrimdışı veritabanı konumunu depolamak için yeni bir özellik ekleyin:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. çevrimdışı veritabanını tanımlamak için InitializeAsync yöntemini güncelleştirin:

    // 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. çevrimdışı eşitleme yapmak için RefreshItemsAsync() güncelleştirin:

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

Çevrimdışı veritabanı konumunu ayarlama

TodoApp.WPF projesinde App.xaml.cs dosyasını düzenleyin. RemoteTodoService tanımını aşağıdaki gibi değiştirin:

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

kimlik doğrulama öğreticisini tamamlamadıysanız tanım şu şekilde görünmelidir:

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

Not

Çevrimdışı veritabanını, Bir Windows sisteminde okuma/yazma/oluşturma izinlerinizin olduğu her yerde depolayabilirsiniz. Environment.SpecialFolder sınıfı, uygulamaya göre standart konumlar verir.

Uygulamayı test edin

Uygulama, yenileme simgesine basılana kadar arka uçla eşitlenmez. Test etmek için:

  1. Azure portalınıaçın.

  2. Hızlı başlangıç için kaynakları içeren kaynak grubunu açın.

  3. quickstart veritabanını seçin.

  4. Sorgu düzenleyicisi (önizleme)seçin.

  5. Veritabanı için ayarladığınız kimlik bilgilerini kullanarak SQL Server kimlik doğrulamasıyla oturum açın.

    • Gerekirse, IP adresiniz için erişime izin vermeniz istenir. İzin verilenler listesini güncelleştirmek için bağlantıyı seçin, ardından oturum açmayı yeniden denemek için Tamam tuşuna basın.
  6. Sorgu düzenleyicisinde SELECT * FROM [dbo].[TodoItems]girin. Ardındançalıştır'ı seçin.

Geçerli TodoItems listesi görüntülenir.

S Q L sorgu düzenleyicisindeki sonuçların ekran görüntüsü.

Şimdi uygulamanız aracılığıyla bazı değişiklikler yapın. REFRESH (henüz) BASMAYIN.

Azure portalında SQL deyimini tekrarlayın ve veritabanındaki verilerde hiçbir değişiklik yapılmadığını doğrulayın.

Kuyruktaki verileri arka uç hizmetine göndermek için uygulamanızdaki Yenileme simgesini seçin. Çıkış Hata Ayıklama penceresinde HTTP işlemlerinin gerçekleştiğini görürsünüz.

Azure portalında SQL deyimini tekrarlayın ve değişikliklerinizin uzak hizmete gönderildiğini doğrulayın.

Kaynakları temizleme

Başka bir hızlı başlangıç öğreticisi gerçekleştirmediğiniz sürece, arka uç hizmetiyle ilişkili kaynakları şimdi silebilirsiniz.

  1. Azure portalınıaçın.
  2. Hızlı başlangıç kaynaklarını tutan kaynak grubunu seçin.
  3. kaynak grubunu sil seçin.
  4. Silme işlemini onaylamak için yönergeleri izleyin.

Azure CLI'yi de kullanabilirsiniz:

az group delete -g quickstart

Kaynakları dağıtmak için Azure Geliştirici CLI'sini kullandıysanız bunun yerine azd down komutunu kullanabilirsiniz.

Silme işleminin tamamlanması birkaç dakika sürer.

Sonraki adımlar