Solucionar problemas de Sync Framework
En este tema se muestran soluciones a estos problemas comunes que se pueden producir cuando se usa Sync Framework:
Al instalar Sync Framework 2.0, no se actualiza una versión instalada previamente
La aplicación administrada produce la excepción System.Runtime.InteropServices.COMException (0x80040154)
La aplicación administrada produce la excepción System.Runtime.InteropServices.COMException (0x80004002)
La información de la pila es incorrecta cuando se depura en la versión de 64 bits del sistema operativo Windows
Sync Framework llama de forma repetida a GetChangeBatch en un bucle sin fin
Si desea obtener más ayuda para solucionar problemas que no se muestran aquí, visite el Centro para desarrolladores de Sync Framework. Para obtener información sobre compatibilidad de Sync Framework con la infraestructura de Seguimiento de eventos para Windows (ETW), vea Componentes de seguimiento de Sync Framework.
Al instalar Sync Framework 2.0, no se actualiza una versión instalada previamente
Cuando se instala Sync Framework 2.0, no se quitan ni actualizan las versiones de CTP de Sync Framework instaladas previamente.
Solución
Desinstale todas las versiones de CTP de Sync Framework 2.0 antes de instalar la última versión de lanzamiento. Sync Framework 2.0 se puede instalar en paralelo con Sync Framework 1.0.
La aplicación administrada produce la excepción System.Runtime.InteropServices.COMException (0x80040154)
Una aplicación de sincronización administrada produce una excepción System.Runtime.InteropServices.COMException con el mensaje de error siguiente: "No se pudo recuperar el generador de clases COM para el componente con CLSID {565AEDBF-3108-4405-AF1F-9C2C25925DAE} debido al siguiente error: 80040154".
Esta excepción se produce cuando un componente de sincronización no administrado, como Synchronization.dll, no está en la instalación. Esto puede ocurrir cuando se ha desinstalado Sync Framework o cuando la instalación no se completó correctamente.
Solución
Vuelva a instalar Sync Framework. Sync Framework se puede descargar desde este sitio web de Microsoft.
La aplicación administrada produce la excepción System.Runtime.InteropServices.COMException (0x80004002)
Una aplicación de sincronización administrada inicia una excepción System.Runtime.InteropServices.COMException con el mensaje de error siguiente: "No se puede convertir el objeto COM del tipo 'clase administrada de Sync Framework' al tipo de interfaz 'clase de interoperabilidad COM de Sync Framework'. Ocurrió un error de operación debido a que la llamada QueryInterface en el componente COM para la interfaz con IID '{73EA794F-1251-4466-A19C-DAEAF5BDBD04}' generó el siguiente error: Interfaz no compatible (excepción de HRESULT: 0x80004002 (E_NOINTERFACE))".
Esta excepción se produce cuando un objeto de Sync Framework se crea en un contenedor uniproceso y se llama a un método del objeto desde otro contenedor uniproceso diferente. En este caso, .NET Framework intenta calcular referencias del objeto Sync Framework de un contenedor al otro consultando la interfaz IMarshal en el objeto Sync Framework. Los objetos de Sync Framework no implementan la interfaz IMarshal, por lo que se produce un error en la llamada con esta excepción.
Solución
Use subprocesos de contenedores multiproceso (MTA). No es necesario calcular referencias para los subprocesos MTA.
La información de la pila es incorrecta cuando se depura en la versión de 64 bits del sistema operativo Windows
En la versión de 64 bits del sistema operativo Windows, la información de la pila se pierde y se muestra incorrectamente en el depurador.
Este problema se produce cuando un componente administrado produce una excepción que pasa a un componente no administrado y, a continuación, este componente no administrado devuelve la excepción a un componente administrado. En este caso, .NET Framework no conserva correctamente la información de la pila en la versión de 64 bits del sistema operativo Windows. Dado que los componentes administrados de Sync Framework incluyen componentes no administrados utilizando la característica de interoperabilidad COM de .NET Framework, cuando ciertos componentes administrados producen excepciones, se presenta esta situación.
Un ejemplo concreto de este problema es una aplicación de sincronización administrada que genera una fuente de FeedSync. La aplicación administrada implementa un método FeedIdConverter que produce una excepción. La excepción se pasa al componente no administrado subyacente de Sync Framework y, a continuación, se devuelve al código de la aplicación administrada. En este momento, el seguimiento de la pila en el depurador no mostrará el origen de la excepción correctamente.
Solución
Dado que la información de la pila no se puede conservar correctamente en este caso, tiene que utilizar otra estrategia de depuración, como producir una excepción personalizada para que el origen de la excepción se pueda determinar mediante el tipo de la propia excepción.
Sync Framework llama de forma repetida a GetChangeBatch en un bucle sin fin
Durante la sincronización, Sync Framework llama de forma repetida a GetChangeBatch (en el código administrado) o a IKnowledgeSyncProvider::GetChangeBatch (en el código no administrado) hasta que recibe un lote de cambios que devuelve true desde IsLastBatch (en el código administrado) o TRUE desde ISyncChangeBatchBase::GetIsLastBatch (en el código no administrado).
Solución
Antes de que el proveedor devuelva el último lote de cambios, debe utilizar SetLastBatch (en el código administrado) o ISyncChangeBatchBase::SetLastBatch (en el código no administrado) para marcarlo como último lote.