Cómo implementar una resolución de conflictos personalizada basada en COM para un artículo de mezcla (programación de la replicación)
El espacio de nombres Microsoft.SqlServer.Replication.BusinessLogicSupport implementa una interfaz que le permite escribir una lógica de negocios compleja para administrar eventos y resolver conflictos que se producen durante el proceso de sincronización de replicación de mezcla. Para obtener más información, vea Cómo implementar un controlador de lógica de negocios para un artículo de mezcla (programación de la replicación). También puede escribir su propia lógica de negocios personalizada basada en código nativo para resolver conflictos. Esta lógica está generada como componente COM y se compila en las bibliotecas de vínculo dinámico (DLL), usando productos como Microsoft Visual C++. Esta resolución de conflictos personalizada basada en COM debe implementar la interfaz ICustomResolver, que está diseñada específicamente para la resolución de conflictos.
Para crear y registrar una resolución de conflictos personalizada basada en COM
En un entorno de creación compatible con COM, agregue referencias a la biblioteca de resolución de conflictos personalizada.
Para un proyecto de Visual C++, use la directiva #import para importar esta biblioteca en su proyecto.
Cree una clase que implemente la interfaz ICustomResolver.
Implemente determinados métodos y propiedades.
Genere el proyecto para crear el archivo de biblioteca de resolución de conflictos personalizada.
Implemente la biblioteca en el directorio que contiene la aplicación ejecutable del Agente de mezcla (normalmente \Microsoft SQL Server\100\COM).
Nota
Se debe implementar una resolución de conflictos personalizada en el Suscriptor para una suscripción de extracción, en el Distribuidor para una suscripción de inserción, o en el servidor web usado con sincronización web.
Registre la biblioteca de resolución de conflictos personalizada usando regsvr32.exe desde el directorio de implementación de la siguiente manera:
regsvr32.exe mycustomresolver.dll
En el Publicador, ejecute sp_enumcustomresolvers (Transact-SQL) para comprobar que la biblioteca no está registrada aún como resolución de conflictos personalizada.
Para registrar la biblioteca como resolución de conflictos personalizada, ejecute sp_registercustomresolver (Transact-SQL), en el Distribuidor. Especifique el nombre descriptivo del objeto COM para @article_resolver, el Id. de la biblioteca (CLSID) para @resolver_clsidy un valor de false para @is_dotnet_assembly.
Nota
Cuando ya no se necesite, se puede eliminar del registro una resolución de conflictos personalizada usando sp_unregistercustomresolver (Transact-SQL).
(Opcional) En un clúster, repita los pasos 5-8 para registrar la resolución de conflictos personalizada en todos los nodos del clúster. Esto es necesario para asegurar que la resolución personalizada pueda cargar correctamente la reconciliación tras una conmutación por error.
Para utilizar una resolución de conflictos personalizada con un nuevo artículo de tabla
En el Publicador, ejecute sp_enumcustomresolvers (Transact-SQL) y tenga en cuenta el nombre descriptivo de la resolución que desee.
En la base de datos de publicación del publicador, ejecute sp_addmergearticle (Transact-SQL) para definir un artículo. Especifique el nombre descriptivo de la resolución de artículos del paso 1 para @article_resolver. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).
Para utilizar una resolución de conflictos personalizada con un artículo de tabla existente
En el Publicador, ejecute sp_enumcustomresolvers (Transact-SQL) y tenga en cuenta el nombre descriptivo de la resolución que desee.
Ejecute sp_changemergearticle (Transact-SQL), especificando @publication, @article, un valor de article_resolver para @property y el nombre descriptivo de la resolución de artículos del paso 1 para @value.