如何:將訂閱設定為使用 Web 同步處理 (複寫 Transact-SQL 程式設計)

本主題中的程序,是設定合併式複寫的 Web 同步處理時所採取的第三個步驟。在啟用發行集及設定執行 Microsoft Internet Information Services (IIS) 的電腦之後,必須執行這個步驟。如需組態處理序的概觀,請參閱<如何:為合併式複寫設定 Web 同步處理 (複寫 Transact-SQL 程式設計)>。當您針對只能透過 HTTP 連接到發行者的訂閱者將訂閱設定為使用 Web 同步處理時,您必須適當地設定發行集。如需詳細資訊,請參閱<如何:設定發行集來允許 Web 同步處理 (複寫 Transact-SQL 程式設計)>。當您完成本主題中的程序之後,請同步處理您已建立的訂閱。如需詳細資訊,請參閱<如何:同步處理提取訂閱 (複寫程式設計)>。

本主題將描述 Web 同步處理所需的參數。如需有關如何建立提取訂閱的詳細資訊,請參閱<如何: 建立提取訂閱 (複寫 Transact-SQL 程式設計)>。

重要事項重要事項

用於 Web 同步處理之 Web 伺服器的 URL (例如 https://server.domain.com/directory/replisapi.dll) 會指定 replisapi.dll 的位置。如果設定伺服器針對安全通訊端層 (SSL) 使用預設通訊埠 443 以外的通訊埠,您也必須提供通訊埠,例如:https://server.domain.com:PortNumber/directory/replisapi.dll。URL 中的伺服器名稱必須與建立憑證時所用的名稱相同。例如,在內部網路中,您可以透過 https://server/ 來存取 Web 伺服器。但是,如果在建立憑證時使用了完整名稱 (例如 https://server.domain.com/),您就必須在 Web 服務 URL 中使用這個完整名稱。

若要將訂閱設定為使用 Web 同步處理

  1. 在發行者上,執行 sp_addmergesubscription。指定 @publication@subscriber@subscriber_db 的值,並將 @subscription_type 的值指定為 pull。這樣會在發行者上註冊提取訂閱。

  2. 若要在訂閱者上建立提取訂閱,請執行 sp_addmergepullsubscription,為 @publication@publisher@publisher_db 指定值。

  3. 在訂閱者上執行 sp_addmergepullsubscription_agent,為 @publisher@publisher_db@publication 指定值,並針對 @use_web_sync 指定 1 的值及指定下列參數的值:

    • @internet_url 是 replisapi.dll 的位置。

    • @internet_security_mode 是從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的安全性模式。0 的值指定會使用「基本驗證」,1 的值 (預設值) 指定會使用「Windows 整合式驗證」。

    • @internet_login 是透過「基本驗證」從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的登入。

    • @internet_password 是透過「基本驗證」從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的密碼。

    [!附註]

    若要使用 Web 同步處理來同步處理訂閱,必須同時啟用上載和下載階段。

當您針對只能透過 HTTP 的 Web 伺服器連接到發行者的訂閱者來將訂閱設定為使用 Web 同步處理時

  1. 若要在訂閱者上建立提取訂閱,請執行 sp_addmergepullsubscription,針對 @subscriber_type 指定 anonymous 的值及指定 @publication@publisher@publisher_db 的值。

  2. 在訂閱者上執行 sp_addmergepullsubscription_agent,為 @publisher@publisher_db@publication 指定值,並針對 @use_web_sync 指定 1 的值及指定下列參數的值:

    • @internet_url 是 replisapi.dll 的位置。

    • @internet_security_mode 是從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的安全性模式。0 的值指定會使用「基本驗證」,1 的值 (預設值) 指定會使用「Windows 整合式驗證」。

    • @internet_login 是透過「基本驗證」從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的登入。

    • @internet_password 是透過「基本驗證」從訂閱者連接到執行 IIS 的電腦時,合併代理程式所將使用的密碼。

    [!附註]

    若要使用 Web 同步處理來同步處理訂閱,必須同時啟用上載和下載階段。

範例

下列範例會使用 Web 同步處理來建立與發行者同步處理的訂閱。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @websyncurl AS sysname;
DECLARE @security_mode AS int;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';
SET @websyncurl = 'https://' + $(WebServer) + '/WebSync';
SET @security_mode = 0; -- Basic Authentication for IIS 
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher, 
    @job_login = @login, 
    @job_password = @password,
    @use_web_sync = 1,
    @internet_security_mode = @security_mode,
    @internet_url = @websyncurl,
    @internet_login = @login,
    @internet_password = @password;
GO

USE [AdventureWorks2008R2]
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksSalesOrdersMergeWebSync';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addmergesubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @subscription_type = N'pull';
GO

下列範例會針對只能透過 HTTP 的 Web 伺服器連接到發行者的訂閱者,使用 Web 同步處理來建立與發行者同步處理的訂閱。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

-- Publication must support anonymous Subscribers.
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @websyncurl AS sysname;
DECLARE @security_mode AS int;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksSalesOrdersMergeWebSync';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';
SET @websyncurl = 'https://' + $(WebServer) + '/WebSync';
SET @security_mode = 0; -- Basic Authentication for IIS
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB,
    @subscriber_type = N'anonymous';

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher, 
    @job_login = @login, 
    @job_password = @password,
    @use_web_sync = 1,
    @internet_security_mode = @security_mode,
    @internet_url = @websyncurl,
    @internet_login = @login,
    @internet_password = @password;
GO