如何:為合併發行項實作以 COM 為基礎的自訂衝突解決器 (複寫程式設計)

Microsoft.SqlServer.Replication.BusinessLogicSupport 命名空間會實作一個介面,此介面可讓您撰寫複雜的商務邏輯來處理事件,並解決合併複寫同步處理程序期間所發生的衝突。如需詳細資訊,請參閱<如何:為合併發行項實作商務邏輯處理常式 (複寫程式設計)>。您也可以撰寫自己的原生程式碼式自訂商務邏輯,以解決衝突。此邏輯會建立為 COM 元件,並編譯成動態連結程式庫 (DLL) (使用類似 Microsoft Visual C++ 的產品)。這類以 COM 為基礎的自訂衝突解決器必須實作 ICustomResolver 介面,此介面是專門針對衝突解決所設計。

建立及註冊以 COM 為基礎的自訂衝突解決器

  1. 在 COM 相容的撰寫環境中,加入對自訂衝突解決器程式庫的參考。

  2. 針對 Visual C++ 專案,使用 #import 指示詞將此程式庫匯入專案中。

  3. 建立可實作 ICustomResolver 介面的類別。

  4. 實作特定的方法和屬性。

  5. 建立專案來建立自訂衝突解決器程式庫檔案。

  6. 在包含合併代理程式可執行檔的目錄中 (通常是 \Microsoft SQL Server\100\COM) 部署此程式庫。

    [!附註]

    如果是提取訂閱,則必須在訂閱者上部署自訂衝突解決器,如果是發送訂閱,則必須在散發者上部署,或是在搭配 Web 同步處理的 Web 伺服器上部署。

  7. 從部署目錄使用 regsvr32.exe 註冊自訂衝突解決器程式庫,如下面所示:

    regsvr32.exe mycustomresolver.dll
    
  8. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),以確認此程式庫尚未註冊為自訂衝突解決器。

  9. 若要將此程式庫註冊為自訂衝突解決器,請在散發者上執行 sp_registercustomresolver (Transact-SQL)。針對 @article_resolver 指定 COM 物件的易記名稱、針對 @resolver_clsid 指定此程式庫的識別碼 (CLSID),以及針對 @is_dotnet_assembly 指定 false 的值。

    [!附註]

    當不再需要時,可以使用 sp_unregistercustomresolver (Transact-SQL) 來取消註冊自訂衝突解決器。

  10. (選擇性) 在叢集上重複步驟 5-8,在此叢集的所有節點上註冊自訂解決器。要確定自訂解決器將能夠在容錯移轉之後適當地載入重新調整器時,必須進行這項處理。

搭配新的資料表發行項使用自訂衝突解決器

  1. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),並記下所需之解決器的易記名稱。

  2. 在發行集資料庫的發行者上,執行 sp_addmergearticle (Transact-SQL) 來定義發行項。針對 @article_resolver 指定步驟 1 中發行項解析程式的易記名稱。如需詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。

搭配現有的資料表發行項使用自訂衝突解決器

  1. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),並記下所需之解決器的易記名稱。

  2. 執行 sp_changemergearticle (Transact-SQL),指定 @publication@article、為 @property 設定的 article_resolver 值,以及為 @value 設定之步驟 1 中發行項解析程式的易記名稱。