如何配置订阅以使用 Web 同步(复制 Transact-SQL 编程)

本主题的过程是为合并复制配置 Web 同步的第三个步骤。 应在启用发布并配置运行 Microsoft Internet 信息服务 (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 中的服务器的名称必须与创建证书时所使用的名称相同。 例如,在 Intranet 上,可能可以通过 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'AdventureWorks';
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 [AdventureWorksReplica]
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 [AdventureWorks]
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'AdventureWorksReplica';

-- 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'AdventureWorks';
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 [AdventureWorksReplica]
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