Compartilhar via


Solucionando problemas do Sync Framework

Este tópico lista soluções para os seguintes problemas comuns que poderão ocorrer quando você estiver usando o Sync Framework:

  • A instalação do Sync Framework 2.0 não atualiza uma versão previamente instalada

  • Aplicativo gerenciado lança System.Runtime.InteropServices.COMException (0x80040154)

  • Aplicativo gerenciado lança System.Runtime.InteropServices.COMException (0x80004002)

  • As informações de pilha estão incorretas quando você está depurando na versão de 64 bits do sistema operacional Windows

  • O Sync Framework chama GetChangeBatch repetidamente em um loop infinito

Para obter mais ajuda para solucionar problemas que não estão listados aqui, consulte o Sync Framework Developer Center (em inglês). Para obter informações sobre o suporte do Sync Framework para a infraestrutura de EWT (Rastreamento de Eventos do Windows), consulte Rastreando componentes do Sync Framework.

A instalação do Sync Framework 2.0 não atualiza uma versão previamente instalada

Quando o Sync Framework 2.0 é instalado, ele não remove nem atualiza uma versão CTP previamente instalada do Sync Framework.

Solução

Desinstale todas as versões CTP do Sync Framework 2.0 antes de instalar a versão final de lançamento. O Sync Framework 2.0 pode ser instalado lado a lado com o Sync Framework 1.0.

Aplicativo gerenciado lança System.Runtime.InteropServices.COMException (0x80040154)

Um aplicativo de sincronização gerenciado lança System.Runtime.InteropServices.COMException com esta mensagem de erro: "Falha na recuperação de factory de classes COM do componente com CLSID {565AEDBF-3108-4405-AF1F-9C2C25925DAE} devido ao seguinte erro: 80040154."

Essa exceção ocorre quando um componente de sincronização não gerenciado, como Synchronization.dll, não está presente na instalação. Isso pode ocorrer quando o Sync Framework é desinstalado ou quando a instalação não é concluída com êxito.

Solução

Reinstale o Sync Framework. O Sync Framework pode ser baixado deste site da Microsoft.

Aplicativo gerenciado lança System.Runtime.InteropServices.COMException (0x80004002)

Um aplicativo de sincronização gerenciado lança System.Runtime.InteropServices.COMException com esta mensagem de erro: "Não é possível converter o objeto COM do tipo 'Classe Gerenciada do Sync Framework' na interface tipo 'Classe de Interoperabilidade COM do Sync Framework'. Esta operação falhou porque a chamada QueryInterface no componente COM para a interface com IID {73EA794F-1251-4466-A19C-DAEAF5BDBD04}' falhou devido a este erro: Não existe suporte para essa interface (exceção de HRESULT: 0x80004002 (E_NOINTERFACE))."

Essa exceção ocorre quando um objeto Sync Framework é criado em um STA e um método do objeto é chamado de um STA diferente. Nesse caso, o .NET Framework tenta realizar marshaling no objeto Sync Framework de um STA para o outro procurando no objeto Sync Framework pela interface IMarshal. Os objetos Sync Framework não implementam IMarshal e, dessa maneira, a chamada falha com essa exceção.

Solução

Use threads MTA. A realização de marshaling não é necessária para threads MTA.

As informações de pilha estão incorretas quando você está depurando na versão de 64 bits do sistema operacional Windows

Na versão de 64 bits do sistema operacional Windows, as informações de pilha são perdidas e exibidas incorretamente no depurador.

Esse problema ocorre quando um componente gerenciado lança uma exceção que passa para um componente não gerenciado e esse componente não gerenciado lança a exceção de volta para um componente gerenciado. Nesse caso, o .NET Framework não preserva corretamente as informações de pilha na versão de 64 bits do sistema operacional Windows. Como os componentes gerenciados do Sync Framework encapsulam componentes não gerenciados usando o recurso de interoperabilidade COM do .NET Framework, quando determinados componentes gerenciados lançam exceções, esse cenário ocorre.

Um exemplo específico do problema é um aplicativo de sincronização gerenciado que está produzindo um feed do FeedSync. O aplicativo gerenciado implementa um método FeedIdConverter que lança uma exceção. A exceção é lançada no componente não gerenciado subjacente do Sync Framework e, em seguida, de volta para o código do aplicativo gerenciado. Nesse momento, o rastreamento de pilha no depurador não mostrará a origem da exceção corretamente.

Solução

Como as informações de pilha não podem ser preservadas corretamente neste caso, você deve usar outra estratégia de depuração, como lançar uma exceção personalizada de forma que a origem da exceção possa ser determinada apenas pelo tipo da exceção.

O Sync Framework chama GetChangeBatch repetidamente em um loop infinito

Durante a sincronização, o Sync Framework chama repetidamente GetChangeBatch (para código gerenciado) ou IKnowledgeSyncProvider::GetChangeBatch (para código não gerenciado) até receber um lote de alterações que retorna true de IsLastBatch (para código gerenciado) ou TRUE de ISyncChangeBatchBase::GetIsLastBatch (para código não gerenciado).

Solução

Antes que o provedor retorne o último lote de alterações, este deve usar SetLastBatch (para código gerenciado) ou ISyncChangeBatchBase::SetLastBatch (para código não gerenciado) para marcar o lote como o último lote.

Consulte também

Conceitos

Microsoft Sync Framework