Procedura: Implementazione di un sistema di risoluzione dei conflitti personalizzato basato su COM per un articolo di merge (programmazione della replica)

Lo spazio dei nomi Microsoft.SqlServer.Replication.BusinessLogicSupport implementa un'interfaccia che consente di scrivere logica di business complessa per gestire gli eventi e i risolvere conflitti che si verificano durante il processo di sincronizzazione della replica di tipo merge. Per ulteriori informazioni, vedere Procedura: Implementazione di un gestore della logica di business per un articolo di merge (programmazione della replica). Per risolvere i conflitti, è inoltre possibile scrivere una logica di business personalizzata basata su codice nativo. Tale logica viene compilata come un componente COM in DLL, utilizzando prodotti quali Microsoft Visual C++. Un simile sistema di risoluzione dei conflitti personalizzato basato su COM deve implementare l'interfaccia ICustomResolver, specificamente progettata per la risoluzione dei conflitti.

Per creare e registrare un sistema di risoluzione dei conflitti personalizzato basato su COM

  1. In un ambiente di creazione compatibile con COM aggiungere riferimenti alla libreria del sistema di risoluzione dei conflitti personalizzato.

  2. Per un progetto Visual C++ utilizzare la direttiva #import per importare la libreria nel progetto.

  3. Creare una classe che implementa l'interfaccia ICustomResolver.

  4. Implementare determinati metodi e proprietà.

  5. Compilare il progetto per creare il file della libreria del sistema di risoluzione dei conflitti personalizzato.

  6. Distribuire la libreria nella directory che contiene il file eseguibile dell'agente di merge, in genere \Microsoft SQL Server\100\COM.

    Nota

    Un sistema di risoluzione dei conflitti personalizzato deve essere distribuito nel Sottoscrittore per una sottoscrizione pull, nel server di distribuzione per una sottoscrizione push o nel server Web utilizzato con sincronizzazione tramite il Web.

  7. Registrare la libreria del sistema di risoluzione dei conflitti personalizzato utilizzando regsvr32.exe nella directory di distribuzione come descritto di seguito:

    regsvr32.exe mycustomresolver.dll
    
  8. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) per verificare che la libreria non è già registrata come sistema di risoluzione dei conflitti personalizzato.

  9. Per registrare la libreria come sistema di risoluzione dei conflitti personalizzato, eseguire sp_registercustomresolver (Transact-SQL) nel server di distribuzione. Specificare il nome descrittivo dell'oggetto COM per @article_resolver, l'ID (CLSID) della libreria per @resolver_clsid e il valore false per @is_dotnet_assembly.

    Nota

    Quando un sistema di risoluzione dei conflitti personalizzato non è più necessario, è possibile annullarne la registrazione utilizzando sp_unregistercustomresolver (Transact-SQL).

  10. (Facoltativo) In un cluster ripetere i passaggi da 5 a 8 per registrare il sistema di risoluzione personalizzato in tutti i nodi del cluster. Tale operazione è necessaria per garantire che il sistema di risoluzione personalizzato sia in grado di caricare correttamente il riconciliatore in seguito a un failover.

Per utilizzare un sistema di risoluzione dei conflitti personalizzato con un nuovo articolo di tabella

  1. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e notare il nome descrittivo del sistema di risoluzione desiderato.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle (Transact-SQL) per definire un articolo. Specificare il nome descrittivo del sistema di risoluzione dei conflitti dell'articolo ottenuto al passaggio 1 per @article_resolver. Per ulteriori informazioni, vedere Procedura: Definizione di un articolo (programmazione Transact-SQL della replica).

Per utilizzare un sistema di risoluzione dei conflitti personalizzato con un articolo di tabella esistente

  1. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e notare il nome descrittivo del sistema di risoluzione desiderato.

  2. Eseguire sp_changemergearticle (Transact-SQL), specificando @publication, @article, il valore article_resolver per @property e il nome descrittivo del sistema di risoluzione dei conflitti dell'articolo ottenuto al passaggio 1 per @value.