Partilhar via


Manipulando conflitos

Para assegurar que as alterações feitas em itens na comunidade de sincronização sejam propagadas corretamente, o provedor de destino deverá detectar e manipular conflitos que ocorrem entre itens enviados do provedor de origem e itens na réplica de destino. O Sync Framework fornece objetos do aplicador de alterações que executam a maior parte do trabalho necessário para detectar e manipular conflitos.

O Sync Framework oferece suporte a duas categorias de conflitos que podem ocorrer durante a sincronização: conflitos de simultaneidade e conflitos de restrição. Os conflitos de simultaneidade ocorrem quando o mesmo item ou a mesma unidade de alteração é alterada em duas réplicas diferentes que são sincronizadas posteriormente. Esses conflitos são aqueles que violam as restrições dos itens ou das unidades de alteração, como a relação de pastas ou o local dos dados nomeados de forma idêntica em um sistema de arquivos.

O Sync Framework fornece dois modos de um aplicativo de sincronização especificar como os conflitos são manipulados: definindo uma política de resolução de conflitos que se aplique a todos os conflitos ocorridos durante uma sessão ou registrando uma notificação de recebimento para cada conflito quando ele é detectado para que possa ser examinado e resolvido individualmente.

Fluxo de execução da manipulação de conflitos

Os conflitos são detectados e manipulados durante a fase de aplicação de alterações da sincronização. Normalmente, isso ocorre no ProcessChangeBatch (para código gerenciado) ou no método ProcessChangeBatch (para código não gerenciado) do provedor de destino.

Quando o provedor de destino usa um aplicador de alterações do Sync Framework, as etapas a seguir são executadas para cada item no lote de alterações.

  1. O aplicador de alterações verifica se uma atualização do item na réplica de destino provoca um conflito de simultaneidade do item com a alteração de origem. Por exemplo, quando o item tiver sido alterado localmente nas réplicas de origem e destino, um conflito atualização-atualização será detectado.

  2. Quando o aplicativo tiver especificado uma política de resolução de conflitos para conflitos de simultaneidade, o aplicador de alterações atribuirá uma ação de resolução de conflitos com base na política. Caso contrário, o aplicador de alterações notificará o aplicativo sobre o conflito, e o aplicativo especificará a ação de resolução de conflitos.

  3. O aplicador de alterações despacha uma chamada ao provedor de destino para aplicar a alteração, com base na ação de resolução de conflitos. Por exemplo, exclua o item da réplica de destino e o substitua pelo item do provedor de origem.

  4. Quando a alteração é aplicada pelo provedor de destino na réplica de destino, o provedor de destino detecta conflitos de restrição. Por exemplo, a alteração da origem é identificada como id1 e denominada "LivrosFavoritos", mas a réplica de destino contém um item identificado como id2, que também é denominado "LivrosFavoritos". A réplica de destino considera os itens iguais porque eles têm o mesmo nome, mas o Sync Framework os considera diferentes porque eles têm IDs de item diferentes. O provedor de destino informa um conflito de restrição ao aplicador de alterações.

  5. Quando o aplicativo tiver especificado uma política de resolução de conflitos de colisão, e o conflito de restrição tiver ocorrido por causa de uma colisão, o aplicador de alterações atribuirá uma ação de resolução de conflitos com base na política. Caso contrário, o aplicador de alterações notificará o aplicativo sobre o conflito, e o aplicativo especificará a ação de resolução de conflitos.

  6. O aplicador de alterações despacha uma chamada ao provedor de destino para aplicar a alteração, com base na ação de resolução de conflitos.

Para obter mais informações sobre como manipular conflitos de simultaneidade, consulte Detectando e solucionando conflitos de simultaneidade.

Para obter mais informações sobre como manipular conflitos de restrição, consulte Detectando e solucionando conflitos de restrição.

Reduzindo conflitos com o uso de unidades de alteração

O número de conflitos pode ser reduzido com o uso de unidades de alteração para representar alterações de subitens. Quando são usadas unidades de alteração, as versões são rastreadas para unidades de alterações em vez de para o item como um todo. Portanto, alterações feitas em unidades de alteração diferentes no mesmo item não causarão conflito. Para obter mais informações, consulte Sincronizando unidades de alteração.

Salvando conflitos em um log

Pode ser útil salvar conflitos em um log para que eles possam ser processados separadamente da sessão de sincronização. Por exemplo, quando o usuário for examinar os conflitos e decidir como resolvê-los. Além disso, quando conflitos de restrição são resolvidos com a mesclagem de dados dos dois itens em conflito, o aplicador de alterações pode, em alguns casos, usar o log de conflitos para armazenar conflitos temporários durante uma sessão de sincronização.

Para obter mais informações sobre a criação e o uso de um log de conflitos, consulte Registrando em log e gerenciando conflitos.

Consulte também

Referência

NotifyingChangeApplier

INotifyingChangeApplierTarget

Outros recursos

Implementando um provedor personalizado padrão

Aplicando alterações

Interface ISynchronousNotifyingChangeApplier

Interface ISynchronousNotifyingChangeApplierTarget