Çekme Aboneliği Oluşturma

Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği

Bu konu, SQL Server Management Studio, Transact-SQL veya Replication Management Objects (RMO) kullanarak SQL Server'da pull aboneliği oluşturmanın nasıl mümkün olduğunu açıklar.

P2P replikasyonu için pull aboneliği kurmak script ile mümkündür, ancak sihirbaz aracılığıyla mümkün değildir.

SQL Server Management Studio'yu kullanma

Yeni Abonelik Sihirbazı kullanarak Publisher veya Abone tarafından pull aboneliği oluşturun. Sihirbazdaki sayfaları takip ederek:

  • Publisher'ı ve yayını belirtin.

  • Çoğaltma aracılarının nerede çalışacağını seçin. Pull aboneliği için, yayın türüne bağlı olarak Distribution Agent Location sayfasında veya Merge Agent Location sayfasında Çalıştır her ajanı abonesinde çalıştır (pull abonelikler) seçeneğini seçin.

  • Aboneleri ve abonelik veritabanlarını belirtin.

  • Çoğaltma aracıları tarafından yapılan bağlantılar için kullanılan oturum açma bilgilerini ve parolaları belirtin:

    • Anlık görüntü ve işlem yayınları abonelikleri için Dağıtım Aracısı Güvenliği sayfasında kimlik bilgilerini belirtin.

    • Birleştirme yayını abonelikleri için, Birleştirme Aracısı Güvenliği sayfasında kimlik bilgilerini belirtin.

    Her ajanın gerektirdiği izinler hakkında bilgi için Replikasyon Ajanı Güvenlik Modeli'ne bakınız.

  • Bir eşitleme takvimi ve abonenin başlatılması gerektiği zamanı belirtin.

  • Yayınları birleştirmek için ek seçenekler belirtin: abonelik türü; parametrizlenmiş filtreleme için değerler; ve yayın Web senkronizasyonu için etkinleştirilmişse HTTPS üzerinden senkronizasyon için bilgiler.

  • Aboneliklerin güncellenmesine izin veren işlemsel yayınlar için ek seçenekler belirtin: Abonelerin değişiklikleri hemen Publisher'a mı tabi tutmalı yoksa kuyruğuna mı yazması gerekiyor; Aboneden Publisher'a bağlanmak için kullanılan kimlik bilgileri.

  • İstehsel olarak aboneliği script edin.

Publisher'dan bir pull aboneliği oluşturmak için

  1. Microsoft SQL Server Management Studio'da Publisher'a bağlanın ve ardından sunucu düğümünü genişletin.

  2. Çoğaltma klasörünü genişletin ve ardından Yerel Yayınlar klasörünü genişletin.

  3. Bir veya daha fazla abonelik oluşturmak istediğiniz yayına sağ tıklayın ve ardından Yeni Abonelikler'e tıklayın.

  4. Yeni Abonelik Sihirbazı'ndaki sayfaları tamamlayın.

Aboneden bir pull aboneliği oluşturmak için

  1. SQL Server Management Studio'da Aboneye bağlanın ve ardından sunucu düğümünü genişletin.

  2. Çoğaltma klasörünü genişletin.

  3. Yerel Abonelikler klasörüne sağ tıklayın ve ardından Yeni Abonelikler'e tıklayın.

  4. Yeni Abonelik Sihirbazı'nın Yayıncı sayfasında, < açılır listesinden > veya > seçeneğini seçin.

  5. Sunucuya Bağlan iletişim kutusunda Publisher'a bağlanın.

  6. Yayın sayfasında bir yayın seçin.

  7. Yeni Abonelik Sihirbazı'ndaki sayfaları tamamlayın.

Transact-SQL Kullanımı

Pull abonelikleri, replikasyon depolanan prosedürler kullanılarak programatik olarak oluşturulabilir. Aboneliğin bağlı olduğu yayın türüne göre kullanılan saklı yordamlar değişiklik gösterebilir.

Bir anlık görüntü veya işlem yayınına pull aboneliği oluşturmak için

  1. Publisher, yayının pull abonelikleri desteklediğini sp_helppublication (Transact-SQL) çalıştırarak doğrulayın.

    • Sonuç kümesinde allow_pull değeri 1 ise, yayın pull abonelikleri destekler.

    • Eğer allow_pull'nin değeri 0 ise, sp_changepublication (Transact-SQL) uygulan; @propertyiçin allow_pull, @valueiçin doğru belirtin.

  2. Abone Noktasında sp_addpullsubscription (Transact-SQL) uygulan. @publisher ve @publication belirtin. Aboneliklerin güncellenmesiyle ilgili bilgi için bkz. Bir İşlemsel Yayına Güncellenebilir Abonelik Oluştur.

  3. Abone Noktasında sp_addpullsubscription_agent (Transact-SQL) çalıştırın. Aşağıdakileri belirtin:

    • @publisher, @publisher_db ve @publication parametreleri.

    • Abone Birimi'ndeki Distribution Agent'nin çalıştığı Microsoft Windows kimlik bilgileri @job_login ve @job_password.

      Note

      Entegre Kimlik Doğrulama Windows ile yapılan bağlantılar her zaman @job_login ve @job_password tarafından belirtilen Windows kimlik bilgilerini kullanır. Dağıtım Aracısı her zaman Windows Tümleşik Kimlik Doğrulaması kullanarak aboneye yerel bağlantı kurar. Varsayılan olarak, ajan Windows Entegre Kimlik Doğrulaması kullanarak Dağıtıcıya bağlanır.

    • (İsteğe bağlı) Eğer Dağıtımcıya bağlanırken SQL Server Authentication kullanmanız gerekirse, @distributor_security_mode için 0 değeri ve @distributor_login ile @distributor_password için SQL Server giriş bilgileri.

    • Bu abonelik için Dağıtım Aracısı işi zamanlaması. Daha fazla bilgi için bkz. Eşitleme Zamanlamalarını Belirtme.

  4. Publisher noktada, çekme aboneliğini kaydetmek için sp_addsubscription (Transact-SQL) çalıştırın. @publication, @subscriber ve @destination_db belirtin. @subscription_type için pull değeri belirtin.

Bir birleştirme yayınına pull aboneliği oluşturmak için

  1. Publisher, yayının pull aboneliklerini desteklediğini sp_helpmergepublication (Transact-SQL) çalıştırarak doğrulayın.

    • Sonuç kümesinde allow_pull değeri 1 ise, yayın pull abonelikleri destekler.

    • Eğer allow_pull'nin değeri 0 ise, sp_changemergepublication (Transact-SQL) uygulan; @property için allow_pull, @valueiçin doğru belirtin.

  2. Abone Noktasında sp_addmergepullsubscription (Transact-SQL) uygulan. @publisher, @publisher_db, @publication ve aşağıdaki parametreleri belirtin:

  3. Abone Noktasında sp_addmergepullsubscription_agent (Transact-SQL) uygula. Aşağıdaki parametreleri belirtin:

    • @publisher, @publisher_db ve @publication.

    • Abone Birimi'ndeki Merge Agent'ın çalıştığı Windows kimlik bilgileri @job_login ve @job_password.

      Note

      Entegre Kimlik Doğrulama Windows ile yapılan bağlantılar her zaman @job_login ve @job_password tarafından belirtilen Windows kimlik bilgilerini kullanır. Merge Agent, Windows Entegre Kimlik Doğrulaması kullanarak her zaman Aboneye yerel bağlantı sağlar. Varsayılan olarak, ajan Windows Entegre Kimlik Doğrulaması kullanarak Dağıtımcı ve Publisher'a bağlanır.

    • (İsteğe bağlı) Eğer Dağıtımcıya bağlanırken SQL Server Authentication kullanmanız gerekirse, @distributor_security_mode için 0 değeri ve @distributor_login ile @distributor_password için SQL Server giriş bilgileri.

    • (İsteğe bağlı) @publisher_security_mode için 0 değeri ve SQL Server için @publisher_login ve @publisher_password için giriş bilgileri, eğer Publisher'ye bağlanırken SQL Server Authentication kullanmanız gerekirse.

    • Bu abonelik için Birleştirme Aracısı görevi için bir zamanlama. Daha fazla bilgi için, Transactional Yayına Güncellenebilir Abonelik Oluşturma bölümüne bakınız.

  4. Publisher noktada sp_addmergesubscription (Transact-SQL) uygula. @publication, @subscriber, @subscriber_db ve @subscription_typeiçin bir çekme değeri belirtin. Bu, pull aboneliğini kaydeder.

Örnekler (Transact-SQL)

Aşağıdaki örnek, işlemsel bir yayına pull aboneliği oluşturur. İlk parti Abone tarafında, ikinci parti ise Publisher'da yürütülür. Oturum açma ve parola değerleri sqlcmd betik değişkenleri kullanılarak çalışma zamanında sağlanır.

-- 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;  
SET @publication = N'AdvWorksProductTran';  
SET @publisher = $(PubServer);  
SET @publicationDB = N'AdventureWorks';  
  
-- At the subscription database, create a pull subscription   
-- to a transactional publication.  
USE [AdventureWorksReplica]  
EXEC sp_addpullsubscription   
  @publisher = @publisher,   
  @publication = @publication,   
  @publisher_db = @publicationDB;  
  
-- Add an agent job to synchronize the pull subscription.  
EXEC sp_addpullsubscription_agent   
  @publisher = @publisher,   
  @publisher_db = @publicationDB,   
  @publication = @publication,   
  @distributor = @publisher,   
  @job_login = $(Login),   
  @job_password = $(Password);  
GO  
-- 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 Publisher.  
DECLARE @publication AS sysname;  
DECLARE @subscriber AS sysname;  
DECLARE @subscriptionDB AS sysname;  
SET @publication = N'AdvWorksProductTran';  
SET @subscriber = $(SubServer);  
SET @subscriptionDB = N'AdventureWorksReplica';  
  
-- At the Publisher, register the subscription, using the defaults.  
EXEC sp_addsubscription   
  @publication = @publication,   
  @subscriber = @subscriber,   
  @destination_db = @subscriptionDB,   
  @subscription_type = N'pull',  
  @status = N'subscribed';  
GO  
  

Aşağıdaki örnek, bir birleştirme yayınına pull aboneliği oluşturur. İlk parti Abone tarafında, ikinci parti ise Publisher'da yürütülür. Giriş ve şifre değerleri, sqlcmd script değişkenleri kullanılarak çalışma zamanında sağlanır.

-- 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 @hostname AS sysname;  
SET @publication = N'AdvWorksSalesOrdersMerge';  
SET @publisher = $(PubServer);  
SET @publicationDB = N'AdventureWorks';  
SET @hostname = N'adventure-works\david8';  
  
-- 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),  
  @hostname = @hostname;  
GO  
-- Execute this batch at the Publisher.  
DECLARE @myMergePub  AS sysname;  
DECLARE @mySub       AS sysname;  
DECLARE @mySubDB     AS sysname;  
  
SET @myMergePub = N'AdvWorksSalesOrdersMerge';  
SET @mySub = N'MYSUBSERVER';  
SET @mySubDB = N'AdventureWorksReplica';  
  
-- At the Publisher, register the subscription, using the defaults.  
USE [AdventureWorks]  
EXEC sp_addmergesubscription @publication = @myMergePub,   
@subscriber = @mySub, @subscriber_db = @mySubDB,   
@subscription_type = N'pull';  
GO  

Çoğaltma Yönetimi Nesnelerini (RMO) Kullanma

Pull abonelik oluşturmak için kullanılan RMO sınıfları, aboneliğin ait olduğu yayın türüne bağlıdır.

Bir anlık görüntü veya işlem yayınına pull aboneliği oluşturmak için

  1. Sınıfını kullanarak hem Aboneye hem de Yayımcıya ServerConnection bağlantılar oluşturun.

  2. 1. adımdaki TransPublication Publisher bağlantısını kullanarak sınıfının bir örneğini oluşturun. Name, DatabaseName ve ConnectionContext belirtin.

  3. yöntemini çağırın LoadProperties . Bu yöntem false döndürürse, 2. adımda belirtilen özellikler yanlıştır veya yayın sunucuda mevcut değildir.

  4. özelliği ile arasında bir bit düzeyinde mantıksal VE (Visual C#’ta Attributes ve Visual Basic’te Ve) işlemi gerçekleştirin AllowPull. Sonuç None ise, Attributes'i, | ve arasında Visual C# dilinde Attributes ve Visual Basic dilinde AllowPull olan bit düzeyinde mantıksal OR sonucuna ayarlayın. Sonra, pull abonelikleri etkinleştirmek için arayın CommitPropertyChanges .

  5. Abonelik veritabanı yoksa sınıfını Database kullanarak oluşturun. Daha fazla bilgi için Veritabanları Oluşturma, Değiştirme ve Kaldırma bölümlerine bakınız.

  6. TransPullSubscription sınıfının bir örneğini oluşturun.

  7. Aşağıdaki abonelik özelliklerini ayarlayın:

  8. yöntemini çağırın Create .

  9. Adım 2'deki sınıf örneğini TransPublication kullanarak, çekme aboneliğini Publisher'a kaydetmek için metodu çağırınMakePullSubscriptionWellKnown. Eğer bu kayıt zaten varsa, bir istisna vardır.

Bir birleştirme yayınına pull aboneliği oluşturmak için

  1. Sınıfı kullanarak ServerConnection hem Abone hem de Publisher ile bağlantılar oluşturun.

  2. 1. adımdaki MergePublication Publisher bağlantısını kullanarak sınıfının bir örneğini oluşturun. Name, DatabaseName ve ConnectionContext belirtin.

  3. yöntemini çağırın LoadProperties . Bu yöntem false döndürürse, 2. adımda belirtilen özellikler yanlıştır veya yayın sunucuda mevcut değildir.

  4. özelliği ile arasında bir bit düzeyinde mantıksal VE (Visual C#’ta Attributes ve Visual Basic’te Ve) işlemi gerçekleştirin AllowPull. Sonuç None ise, Attributes'i, | ve arasında Visual C# dilinde Attributes ve Visual Basic dilinde AllowPull olan bit düzeyinde mantıksal OR sonucuna ayarlayın. Sonra, pull abonelikleri etkinleştirmek için arayın CommitPropertyChanges .

  5. Abonelik veritabanı yoksa sınıfını Database kullanarak oluşturun. Daha fazla bilgi için Veritabanları Oluşturma, Değiştirme ve Kaldırma bölümlerine bakınız.

  6. MergePullSubscription sınıfının bir örneğini oluşturun.

  7. Aşağıdaki abonelik özelliklerini ayarlayın:

  8. yöntemini çağırın Create .

  9. Adım 2'deki sınıf örneğini MergePublication kullanarak, çekme aboneliğini Publisher'a kaydetmek için metodu çağırınMakePullSubscriptionWellKnown. Eğer bu kayıt zaten varsa, bir istisna vardır.

Örnek (RMO)

Bu örnek, işlemsel bir yayına pull aboneliği oluşturur. Distribution Agent işi oluşturmak için kullanılan Microsoft Windows hesap kimlik bilgileri çalışma zamanında geçirilir.

// Define the Publisher, publication, and databases.  
string publicationName = "AdvWorksProductTran";  
string publisherName = publisherInstance;  
string subscriberName = subscriberInstance;  
string subscriptionDbName = "AdventureWorksReplica";  
string publicationDbName = "AdventureWorks";  
  
//Create connections to the Publisher and Subscriber.  
ServerConnection subscriberConn = new ServerConnection(subscriberName);  
ServerConnection publisherConn = new ServerConnection(publisherName);  
  
// Create the objects that we need.  
TransPublication publication;  
TransPullSubscription subscription;  
  
try  
{  
    // Connect to the Publisher and Subscriber.  
    subscriberConn.Connect();  
    publisherConn.Connect();  
  
    // Ensure that the publication exists and that   
    // it supports pull subscriptions.  
    publication = new TransPublication();  
    publication.Name = publicationName;  
    publication.DatabaseName = publicationDbName;  
    publication.ConnectionContext = publisherConn;  
  
    if (publication.IsExistingObject)  
    {  
        if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)  
        {  
            publication.Attributes |= PublicationAttributes.AllowPull;  
        }  
  
        // Define the pull subscription.  
        subscription = new TransPullSubscription();  
        subscription.ConnectionContext = subscriberConn;  
        subscription.PublisherName = publisherName;  
        subscription.PublicationName = publicationName;  
        subscription.PublicationDBName = publicationDbName;  
        subscription.DatabaseName = subscriptionDbName;  
  
        // Specify the Windows login credentials for the Distribution Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;  
  
        // Make sure that the agent job for the subscription is created.  
        subscription.CreateSyncAgentByDefault = true;  
  
        // By default, subscriptions to transactional publications are synchronized   
        // continuously, but in this case we only want to synchronize on demand.  
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;  
  
        // Create the pull subscription at the Subscriber.  
        subscription.Create();  
  
        Boolean registered = false;  
  
        // Verify that the subscription is not already registered.  
        foreach (TransSubscription existing  
            in publication.EnumSubscriptions())  
        {  
            if (existing.SubscriberName == subscriberName  
                && existing.SubscriptionDBName == subscriptionDbName)  
            {  
                registered = true;  
            }  
        }  
        if (!registered)  
        {  
            // Register the subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown(  
                subscriberName, subscriptionDbName,  
                SubscriptionSyncType.Automatic,  
                TransSubscriberType.ReadOnly);  
        }  
    }  
    else  
    {  
        // Do something here if the publication does not exist.  
        throw new ApplicationException(String.Format(  
            "The publication '{0}' does not exist on {1}.",  
            publicationName, publisherName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement the appropriate error handling here.  
    throw new ApplicationException(String.Format(  
        "The subscription to {0} could not be created.", publicationName), ex);  
}  
finally  
{  
    subscriberConn.Disconnect();  
    publisherConn.Disconnect();  
}  
  
' Define the Publisher, publication, and databases.  
Dim publicationName As String = "AdvWorksProductTran"  
Dim publisherName As String = publisherInstance  
Dim subscriberName As String = subscriberInstance  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  
  
'Create connections to the Publisher and Subscriber.  
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)  
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)  
  
' Create the objects that we need.  
Dim publication As TransPublication  
Dim subscription As TransPullSubscription  
  
Try  
    ' Connect to the Publisher and Subscriber.  
    subscriberConn.Connect()  
    publisherConn.Connect()  
  
    ' Ensure that the publication exists and that   
    ' it supports pull subscriptions.  
    publication = New TransPublication()  
    publication.Name = publicationName  
    publication.DatabaseName = publicationDbName  
    publication.ConnectionContext = publisherConn  
  
    If publication.IsExistingObject Then  
        If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then  
            publication.Attributes = publication.Attributes _  
            Or PublicationAttributes.AllowPull  
        End If  
  
        ' Define the pull subscription.  
        subscription = New TransPullSubscription()  
        subscription.ConnectionContext = subscriberConn  
        subscription.PublisherName = publisherName  
        subscription.PublicationName = publicationName  
        subscription.PublicationDBName = publicationDbName  
        subscription.DatabaseName = subscriptionDbName  
        subscription.Description = "Pull subscription to " + publicationDbName _  
        + " on " + subscriberName + "."  
  
        ' Specify the Windows login credentials for the Distribution Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword  
  
        ' Make sure that the agent job for the subscription is created.  
        subscription.CreateSyncAgentByDefault = True  
  
        ' By default, subscriptions to transactional publications are synchronized   
        ' continuously, but in this case we only want to synchronize on demand.  
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand  
  
        ' Create the pull subscription at the Subscriber.  
        subscription.Create()  
  
        Dim registered As Boolean = False  
  
        ' Verify that the subscription is not already registered.  
        For Each existing As TransSubscription In publication.EnumSubscriptions()  
            If existing.SubscriberName = subscriberName And _  
                existing.SubscriptionDBName = subscriptionDbName Then  
                registered = True  
            End If  
        Next existing  
        If Not registered Then  
            ' Register the subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown( _  
             subscriberName, subscriptionDbName, _  
             SubscriptionSyncType.Automatic, _  
             TransSubscriberType.ReadOnly)  
        End If  
    Else  
        ' Do something here if the publication does not exist.  
        Throw New ApplicationException(String.Format( _  
         "The publication '{0}' does not exist on {1}.", _  
         publicationName, publisherName))  
    End If  
Catch ex As Exception  
    ' Implement the appropriate error handling here.  
    Throw New ApplicationException(String.Format( _  
        "The subscription to {0} could not be created.", publicationName), ex)  
Finally  
    subscriberConn.Disconnect()  
    publisherConn.Disconnect()  
End Try  
  

Bu örnek, bir birleşme yayınına pull aboneliği oluşturur. Merge Agent işini oluşturmak için kullanılan Windows hesabı kimlik bilgileri çalışma zamanında geçirilir.

// Define the Publisher, publication, and databases.  
string publicationName = "AdvWorksSalesOrdersMerge";  
string publisherName = publisherInstance;  
string subscriberName = subscriberInstance;  
string subscriptionDbName = "AdventureWorksReplica";  
string publicationDbName = "AdventureWorks";  
string hostname = @"adventure-works\garrett1";  
  
//Create connections to the Publisher and Subscriber.  
ServerConnection subscriberConn = new ServerConnection(subscriberName);  
ServerConnection publisherConn = new ServerConnection(publisherName);  
  
// Create the objects that we need.  
MergePublication publication;  
MergePullSubscription subscription;  
  
try  
{  
    // Connect to the Subscriber.  
    subscriberConn.Connect();  
  
    // Ensure that the publication exists and that   
    // it supports pull subscriptions.  
    publication = new MergePublication();  
    publication.Name = publicationName;  
    publication.DatabaseName = publicationDbName;  
    publication.ConnectionContext = publisherConn;  
  
    if (publication.LoadProperties())  
    {  
        if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)  
        {  
            publication.Attributes |= PublicationAttributes.AllowPull;  
        }  
  
        // Define the pull subscription.  
        subscription = new MergePullSubscription();  
        subscription.ConnectionContext = subscriberConn;  
        subscription.PublisherName = publisherName;  
        subscription.PublicationName = publicationName;  
        subscription.PublicationDBName = publicationDbName;  
        subscription.DatabaseName = subscriptionDbName;  
        subscription.HostName = hostname;  
  
        // Specify the Windows login credentials for the Merge Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;  
  
        // Make sure that the agent job for the subscription is created.  
        subscription.CreateSyncAgentByDefault = true;  
  
        // Create the pull subscription at the Subscriber.  
        subscription.Create();  
  
        Boolean registered = false;  
  
        // Verify that the subscription is not already registered.  
        foreach (MergeSubscription existing  
            in publication.EnumSubscriptions())  
        {  
            if (existing.SubscriberName == subscriberName  
                && existing.SubscriptionDBName == subscriptionDbName  
                && existing.SubscriptionType == SubscriptionOption.Pull)  
            {  
                registered = true;  
            }  
        }  
        if (!registered)  
        {  
            // Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown(  
                subscriberName, subscriptionDbName,  
                SubscriptionSyncType.Automatic,  
                MergeSubscriberType.Local, 0);  
        }  
    }  
    else  
    {  
        // Do something here if the publication does not exist.  
        throw new ApplicationException(String.Format(  
            "The publication '{0}' does not exist on {1}.",  
            publicationName, publisherName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement the appropriate error handling here.  
    throw new ApplicationException(String.Format(  
        "The subscription to {0} could not be created.", publicationName), ex);  
}  
finally  
{  
    subscriberConn.Disconnect();  
    publisherConn.Disconnect();  
}  
  
' Define the Publisher, publication, and databases.  
Dim publicationName As String = "AdvWorksSalesOrdersMerge"  
Dim publisherName As String = publisherInstance  
Dim subscriberName As String = subscriberInstance  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  
Dim hostname As String = "adventure-works\garrett1"  
  
'Create connections to the Publisher and Subscriber.  
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)  
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)  
  
' Create the objects that we need.  
Dim publication As MergePublication  
Dim subscription As MergePullSubscription  
  
Try  
    ' Connect to the Subscriber.  
    subscriberConn.Connect()  
  
    ' Ensure that the publication exists and that   
    ' it supports pull subscriptions.  
    publication = New MergePublication()  
    publication.Name = publicationName  
    publication.DatabaseName = publicationDbName  
    publication.ConnectionContext = publisherConn  
  
    If publication.LoadProperties() Then  
        If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then  
            publication.Attributes = publication.Attributes _  
            Or PublicationAttributes.AllowPull  
        End If  
  
        ' Define the pull subscription.  
        subscription = New MergePullSubscription()  
        subscription.ConnectionContext = subscriberConn  
        subscription.PublisherName = publisherName  
        subscription.PublicationName = publicationName  
        subscription.PublicationDBName = publicationDbName  
        subscription.DatabaseName = subscriptionDbName  
        subscription.HostName = hostname  
  
        ' Specify the Windows login credentials for the Merge Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword  
  
        ' Make sure that the agent job for the subscription is created.  
        subscription.CreateSyncAgentByDefault = True  
  
        ' Create the pull subscription at the Subscriber.  
        subscription.Create()  
  
        Dim registered As Boolean = False  
  
        ' Verify that the subscription is not already registered.  
        For Each existing As MergeSubscription In _  
        publication.EnumSubscriptions()  
            If existing.SubscriberName = subscriberName Then  
                registered = True  
            End If  
        Next  
        If Not registered Then  
            ' Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown( _  
             subscriberName, subscriptionDbName, _  
             SubscriptionSyncType.Automatic, _  
             MergeSubscriberType.Local, 0)  
        End If  
    Else  
        ' Do something here if the publication does not exist.  
        Throw New ApplicationException(String.Format( _  
         "The publication '{0}' does not exist on {1}.", _  
         publicationName, publisherName))  
    End If  
Catch ex As Exception  
    ' Implement the appropriate error handling here.  
    Throw New ApplicationException(String.Format( _  
        "The subscription to {0} could not be created.", publicationName), ex)  
Finally  
    subscriberConn.Disconnect()  
    publisherConn.Disconnect()  
End Try  

Bu örnek, MSsubscription_properties'ta ilişkili bir ajan işi ve abonelik meta verisi oluşturmadan bir birleştirme yayınına pull aboneliği oluşturur. Merge Agent işini oluşturmak için kullanılan Windows hesabı kimlik bilgileri çalışma zamanında geçirilir.

// Define the Publisher, publication, and databases.  
string publicationName = "AdvWorksSalesOrdersMerge";  
string publisherName = publisherInstance;  
string subscriberName = subscriberInstance;  
string subscriptionDbName = "AdventureWorksReplica";  
string publicationDbName = "AdventureWorks";  
  
//Create connections to the Publisher and Subscriber.  
ServerConnection subscriberConn = new ServerConnection(subscriberName);  
ServerConnection publisherConn = new ServerConnection(publisherName);  
  
// Create the objects that we need.  
MergePublication publication;  
MergePullSubscription subscription;  
  
try  
{  
    // Connect to the Subscriber.  
    subscriberConn.Connect();  
  
    // Ensure that the publication exists and that   
    // it supports pull subscriptions.  
    publication = new MergePublication();  
    publication.Name = publicationName;  
    publication.DatabaseName = publicationDbName;  
    publication.ConnectionContext = publisherConn;  
  
    if (publication.LoadProperties())  
    {  
        if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)  
        {  
            publication.Attributes |= PublicationAttributes.AllowPull;  
        }  
  
        // Define the pull subscription.  
        subscription = new MergePullSubscription();  
        subscription.ConnectionContext = subscriberConn;  
        subscription.PublisherName = publisherName;  
        subscription.PublicationName = publicationName;  
        subscription.PublicationDBName = publicationDbName;  
        subscription.DatabaseName = subscriptionDbName;  
  
        // Specify that an agent job not be created for this subscription. The  
        // subscription can only be synchronized by running the Merge Agent directly.  
        // Subscription metadata stored in MSsubscription_properties will not  
        // be available and must be specified at run time.  
        subscription.CreateSyncAgentByDefault = false;  
  
        // Create the pull subscription at the Subscriber.  
        subscription.Create();  
  
        Boolean registered = false;  
  
        // Verify that the subscription is not already registered.  
        foreach (MergeSubscription existing  
            in publication.EnumSubscriptions())  
        {  
            if (existing.SubscriberName == subscriberName  
                && existing.SubscriptionDBName == subscriptionDbName  
                && existing.SubscriptionType == SubscriptionOption.Pull)  
            {  
                registered = true;  
            }  
        }  
        if (!registered)  
        {  
            // Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown(  
                subscriberName, subscriptionDbName,  
                SubscriptionSyncType.Automatic,  
                MergeSubscriberType.Local, 0);  
        }  
    }  
    else  
    {  
        // Do something here if the publication does not exist.  
        throw new ApplicationException(String.Format(  
            "The publication '{0}' does not exist on {1}.",  
            publicationName, publisherName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement the appropriate error handling here.  
    throw new ApplicationException(String.Format(  
        "The subscription to {0} could not be created.", publicationName), ex);  
}  
finally  
{  
    subscriberConn.Disconnect();  
    publisherConn.Disconnect();  
}  
' Define the Publisher, publication, and databases.  
Dim publicationName As String = "AdvWorksSalesOrdersMerge"  
Dim publisherName As String = publisherInstance  
Dim subscriberName As String = subscriberInstance  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  
  
'Create connections to the Publisher and Subscriber.  
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)  
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)  
  
' Create the objects that we need.  
Dim publication As MergePublication  
Dim subscription As MergePullSubscription  
  
Try  
    ' Connect to the Subscriber.  
    subscriberConn.Connect()  
  
    ' Ensure that the publication exists and that   
    ' it supports pull subscriptions.  
    publication = New MergePublication()  
    publication.Name = publicationName  
    publication.DatabaseName = publicationDbName  
    publication.ConnectionContext = publisherConn  
  
    If publication.LoadProperties() Then  
        If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then  
            publication.Attributes = publication.Attributes _  
            Or PublicationAttributes.AllowPull  
        End If  
  
        ' Define the pull subscription.  
        subscription = New MergePullSubscription()  
        subscription.ConnectionContext = subscriberConn  
        subscription.PublisherName = publisherName  
        subscription.PublicationName = publicationName  
        subscription.PublicationDBName = publicationDbName  
        subscription.DatabaseName = subscriptionDbName  
  
        ' Specify that an agent job not be created for this subscription. The  
        ' subscription can only be synchronized by running the Merge Agent directly.  
        ' Subscription metadata stored in MSsubscription_properties will not  
        ' be available and must be specified at run time.  
        subscription.CreateSyncAgentByDefault = False  
  
        ' Create the pull subscription at the Subscriber.  
        subscription.Create()  
  
        Dim registered As Boolean = False  
  
        ' Verify that the subscription is not already registered.  
        For Each existing As MergeSubscription In _  
        publication.EnumSubscriptions()  
            If existing.SubscriberName = subscriberName Then  
                registered = True  
            End If  
        Next  
        If Not registered Then  
            ' Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown( _  
             subscriberName, subscriptionDbName, _  
             SubscriptionSyncType.Automatic, _  
             MergeSubscriberType.Local, 0)  
        End If  
    Else  
        ' Do something here if the publication does not exist.  
        Throw New ApplicationException(String.Format( _  
         "The publication '{0}' does not exist on {1}.", _  
         publicationName, publisherName))  
    End If  
Catch ex As Exception  
    ' Implement the appropriate error handling here.  
    Throw New ApplicationException(String.Format( _  
     "The subscription to {0} could not be created.", publicationName), ex)  
Finally  
    subscriberConn.Disconnect()  
    publisherConn.Disconnect()  
End Try  

Bu örnek, bir birleştirme yayınına çekme aboneliği oluşturur ve bu abonelik Web senkronizasyonu kullanılarak internet üzerinden senkronize edilir. Merge Agent işini oluşturmak için kullanılan Windows hesabı kimlik bilgileri çalışma zamanında geçirilir. Daha fazla bilgi için bkz. Web Senkronizasyonunu Yapılandır.

// Define the Publisher, publication, and databases.  
string publicationName = "AdvWorksSalesOrdersMerge";  
string publisherName = publisherInstance;  
string subscriberName = subscriberInstance;  
string subscriptionDbName = "AdventureWorksReplica";  
string publicationDbName = "AdventureWorks";  
string hostname = @"adventure-works\garrett1";  
string webSyncUrl = "https://" + publisherInstance + "/WebSync/replisapi.dll";  
  
//Create connections to the Publisher and Subscriber.  
ServerConnection subscriberConn = new ServerConnection(subscriberName);  
ServerConnection publisherConn = new ServerConnection(publisherName);  
  
// Create the objects that we need.  
MergePublication publication;  
MergePullSubscription subscription;  
  
try  
{  
    // Connect to the Subscriber.  
    subscriberConn.Connect();  
  
    // Ensure that the publication exists and that   
    // it supports pull subscriptions and Web synchronization.  
    publication = new MergePublication();  
    publication.Name = publicationName;  
    publication.DatabaseName = publicationDbName;  
    publication.ConnectionContext = publisherConn;  
  
    if (publication.LoadProperties())  
    {  
        if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)  
        {  
            publication.Attributes |= PublicationAttributes.AllowPull;  
        }  
        if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)  
        {  
            publication.Attributes |= PublicationAttributes.AllowWebSynchronization;  
        }  
  
        // Define the pull subscription.  
        subscription = new MergePullSubscription();  
        subscription.ConnectionContext = subscriberConn;  
        subscription.PublisherName = publisherName;  
        subscription.PublicationName = publicationName;  
        subscription.PublicationDBName = publicationDbName;  
        subscription.DatabaseName = subscriptionDbName;  
        subscription.HostName = hostname;  
  
        // Specify the Windows login credentials for the Merge Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;  
  
        // Enable Web synchronization.  
        subscription.UseWebSynchronization = true;  
        subscription.InternetUrl = webSyncUrl;  
  
        // Specify the same Windows credentials to use when connecting to the  
        // Web server using HTTPS Basic Authentication.  
        subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication;  
        subscription.InternetLogin = winLogin;  
        subscription.InternetPassword = winPassword;  
  
        // Ensure that we create a job for this subscription.  
        subscription.CreateSyncAgentByDefault = true;  
  
        // Create the pull subscription at the Subscriber.  
        subscription.Create();  
  
        Boolean registered = false;  
  
        // Verify that the subscription is not already registered.  
        foreach (MergeSubscription existing  
            in publication.EnumSubscriptions())  
        {  
            if (existing.SubscriberName == subscriberName  
                && existing.SubscriptionDBName == subscriptionDbName  
                && existing.SubscriptionType == SubscriptionOption.Pull)  
            {  
                registered = true;  
            }  
        }  
        if (!registered)  
        {  
            // Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown(  
                subscriberName, subscriptionDbName,  
                SubscriptionSyncType.Automatic,  
                MergeSubscriberType.Local, 0);  
        }  
    }  
    else  
    {  
        // Do something here if the publication does not exist.  
        throw new ApplicationException(String.Format(  
            "The publication '{0}' does not exist on {1}.",  
            publicationName, publisherName));  
    }  
}  
catch (Exception ex)  
{  
    // Implement the appropriate error handling here.  
    throw new ApplicationException(String.Format(  
        "The subscription to {0} could not be created.", publicationName), ex);  
}  
finally  
{  
    subscriberConn.Disconnect();  
    publisherConn.Disconnect();  
}  
' Define the Publisher, publication, and databases.  
Dim publicationName As String = "AdvWorksSalesOrdersMerge"  
Dim publisherName As String = publisherInstance  
Dim subscriberName As String = subscriberInstance  
Dim subscriptionDbName As String = "AdventureWorksReplica"  
Dim publicationDbName As String = "AdventureWorks"  
Dim hostname As String = "adventure-works\garrett1"  
Dim webSyncUrl As String = "https://" + publisherInstance + "/WebSync/replisapi.dll"  
  
'Create connections to the Publisher and Subscriber.  
Dim subscriberConn As ServerConnection = New ServerConnection(subscriberName)  
Dim publisherConn As ServerConnection = New ServerConnection(publisherName)  
  
' Create the objects that we need.  
Dim publication As MergePublication  
Dim subscription As MergePullSubscription  
  
Try  
    ' Connect to the Subscriber.  
    subscriberConn.Connect()  
  
    ' Ensure that the publication exists and that   
    ' it supports pull subscriptions and Web synchronization.  
    publication = New MergePublication()  
    publication.Name = publicationName  
    publication.DatabaseName = publicationDbName  
    publication.ConnectionContext = publisherConn  
  
    If publication.LoadProperties() Then  
        If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then  
            publication.Attributes = publication.Attributes _  
            Or PublicationAttributes.AllowPull  
        End If  
        If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then  
            publication.Attributes = publication.Attributes _  
            Or PublicationAttributes.AllowWebSynchronization  
        End If  
  
        ' Define the pull subscription.  
        subscription = New MergePullSubscription()  
        subscription.ConnectionContext = subscriberConn  
        subscription.PublisherName = publisherName  
        subscription.PublicationName = publicationName  
        subscription.PublicationDBName = publicationDbName  
        subscription.DatabaseName = subscriptionDbName  
        subscription.HostName = hostname  
        subscription.CreateSyncAgentByDefault = True  
  
        ' Specify the Windows login credentials for the Merge Agent job.  
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin  
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword  
  
        ' Enable Web synchronization.  
        subscription.UseWebSynchronization = True  
        subscription.InternetUrl = webSyncUrl  
  
        ' Specify the same Windows credentials to use when connecting to the  
        ' Web server using HTTPS Basic Authentication.  
        subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication  
        subscription.InternetLogin = winLogin  
        subscription.InternetPassword = winPassword  
  
        ' Create the pull subscription at the Subscriber.  
        subscription.Create()  
  
        Dim registered As Boolean = False  
  
        ' Verify that the subscription is not already registered.  
        For Each existing As MergeSubscription In _  
        publication.EnumSubscriptions()  
            If existing.SubscriberName = subscriberName Then  
                registered = True  
            End If  
        Next  
        If Not registered Then  
            ' Register the local subscription with the Publisher.  
            publication.MakePullSubscriptionWellKnown( _  
             subscriberName, subscriptionDbName, _  
             SubscriptionSyncType.Automatic, _  
             MergeSubscriberType.Local, 0)  
        End If  
    Else  
        ' Do something here if the publication does not exist.  
        Throw New ApplicationException(String.Format( _  
         "The publication '{0}' does not exist on {1}.", _  
         publicationName, publisherName))  
    End If  
Catch ex As Exception  
    ' Implement the appropriate error handling here.  
    Throw New ApplicationException(String.Format( _  
     "The subscription to {0} could not be created.", publicationName), ex)  
Finally  
    subscriberConn.Disconnect()  
    publisherConn.Disconnect()  
End Try