Adicionar sincronização de dados offline ao aplicativo do Windows (WPF)
Nota
Este produto está desativado. Para obter uma substituição para projetos que usam o .NET 8 ou posterior, consulte a biblioteca datasync do Kit de Ferramentas da Comunidade .
Este tutorial aborda o recurso de sincronização offline dos Aplicativos Móveis do Azure para o aplicativo de início rápido do WPF. A sincronização offline permite que os usuários finais interajam com um aplicativo móvel , exibindo, adicionando ou modificando dados, mesmo quando não há nenhuma conexão de rede. As alterações são armazenadas em um banco de dados local. Depois que o dispositivo estiver online novamente, essas alterações serão sincronizadas com o back-end remoto.
Antes de iniciar este tutorial, você deve ter concluído o do Tutorial de Início Rápido do WPF, que inclui a criação de um serviço de back-end adequado. Também presumimos que você tenha adicionado de autenticação ao seu aplicativo. Você pode adicionar recursos offline ao seu aplicativo sem autenticação.
Atualizar o aplicativo para dar suporte à sincronização offline
Na operação online, você lê e grava de um IRemoteTable<T>
. Ao usar a sincronização offline, você lê e grava de um IOfflineTable<T>
em vez disso. O IOfflineTable<T>
é apoiado por um banco de dados SQLite no dispositivo e sincronizado com o banco de dados de back-end.
Adicionar os pacotes NuGet necessários
No Visual Studio:
Clique com o botão direito do mouse na solução
TodoApp
e selecione Gerenciar Pacotes NuGet para solução....Na nova guia, selecione Procurare, em seguida, insira Microsoft.Datasync.Client na caixa de pesquisa.
Selecione o pacote de
Microsoft.Datasync.Client.SQLiteStore
.No painel direito, selecione todos os projetos cliente (exceto o projeto
TodoAppService.NET6
).Selecione Instalar.
Aceite o contrato de licença quando solicitado.
Atualizar o cliente de serviço remoto
Abra o projeto de TodoApp.Data
e localize a classe RemoteTodoService.cs
(dentro do diretório Services
). Atualize a classe da seguinte maneira:
Adicione a seguinte instrução
using
à parte superior do arquivo:using Microsoft.Datasync.Client.SQLiteStore;
Altere a definição de
_table
para ser umIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Adicione uma nova propriedade para armazenar o local do banco de dados offline:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
Atualize o método
InitializeAsync
para definir o banco de dados 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;
Atualize o
RefreshItemsAsync()
para fazer a sincronização 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; }
Definir o local do banco de dados offline
No projeto TodoApp.WPF
, edite o arquivo App.xaml.cs
. Altere a definição do RemoteTodoService
da seguinte maneira:
TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Se você não concluiu o tutorial de autenticação , a definição deverá ter esta aparência:
TodoService = new RemoteTodoService()
{
OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\offline.db"
};
Nota
Você pode armazenar o banco de dados offline onde quer que tenha permissões de leitura/gravação/criação em um sistema Windows. A classe Environment.SpecialFolder
fornece locais padrão de acordo com o aplicativo.
Testar o aplicativo
O aplicativo não sincroniza com o back-end até que o ícone de atualização seja pressionado. Para testar:
Abra o portal do Azure.
Abra o grupo de recursos que contém os recursos para o início rápido.
Selecione o banco de dados
quickstart
.Selecione o editor de consultas (versão prévia).
Faça logon com a autenticação do SQL Server usando as mesmas credenciais que você configurou para o banco de dados.
- Se necessário, você será solicitado a permitir o acesso ao seu endereço IP. Selecione o link para atualizar a lista de permissões e pressione OK para tentar novamente o logon.
No editor de consultas, insira
SELECT * FROM [dbo].[TodoItems]
. Em seguida, selecione Executar.
Uma lista dos TodoItems atuais será exibida.
Agora, faça algumas alterações por meio do aplicativo. NÃO PRESSIONE DE ATUALIZAÇÃO (ainda).
Repita a instrução SQL no portal do Azure e verifique se nenhuma alteração foi feita nos dados no banco de dados.
Selecione o ícone Atualizar em seu aplicativo para efetuar push dos dados na fila para o serviço de back-end. Você verá as transações HTTP acontecendo na janela Depuração de Saída.
Repita a instrução SQL no portal do Azure e verifique se suas alterações foram enviadas por push para o serviço remoto.
Limpar recursos
A menos que você esteja fazendo outro tutorial de início rápido, exclua os recursos associados ao serviço de back-end agora.
- Abra o portal do Azure.
- Selecione o grupo de recursos que contém os recursos de início rápido.
- Selecione Excluir grupo de recursos.
- Siga as instruções para confirmar a exclusão.
Você também pode usar a CLI do Azure:
az group delete -g quickstart
Se você usou a CLI do Desenvolvedor do Azure para implantar recursos, poderá usar o comando azd down
.
A exclusão levará alguns minutos para ser concluída.
Próximas etapas
- Examine a documentação de COMO FAZER: