Creazione di una sottoscrizione pullCreate a Pull Subscription

In questo argomento viene descritto come creare una sottoscrizione pull in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLo RMO (Replication Management Objects).This topic describes how create a pull subscription in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

L'impostazione della sottoscrizione pull per la replica P2P è possibile dallo script, ma non è disponibile tramite la procedura guidata.Setting up a pull subscription for P2P replication is possible by script, but is not available through the wizard.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Creare una sottoscrizione pull nel server di pubblicazione o nel Sottoscrittore tramite la Creazione guidata sottoscrizione.Create a pull subscription at the Publisher or the Subscriber using the New Subscription Wizard. Attenersi alle indicazioni presenti nelle pagine della procedura guidata per:Follow the pages in the wizard to:

  • Specificare il server di pubblicazione e la pubblicazione.Specify the Publisher and publication.

  • Selezionare la posizione di esecuzione degli agenti di replica.Select where replication agents will run. Per una sottoscrizione pull, selezionare Esegui ogni agente nel relativo Sottoscrittore (sottoscrizioni pull) nella pagina Posizione in cui eseguire l'agente di distribuzione o nella pagina Posizione in cui eseguire l'agente di merge , a seconda del tipo di pubblicazione.For a pull subscription, select Run each agent at its Subscriber (pull subscriptions) on the Distribution Agent Location page or Merge Agent Location page, depending on the type of publication.

  • Specificare i Sottoscrittori e i database di sottoscrizione.Specify Subscribers and subscription databases.

  • Specificare gli accessi e le password utilizzati per le connessioni stabilite dagli agenti di replica:Specify the logins and passwords used for connections made by replication agents:

    • Per effettuare sottoscrizioni di pubblicazioni snapshot e transazionali, specificare le credenziali nella pagina Sicurezza agente di distribuzione .For subscriptions to snapshot and transactional publications, specify credentials on the Distribution Agent Security page.

    • Per effettuare sottoscrizioni di pubblicazioni di tipo merge, specificare le credenziali nella pagina Sicurezza agente di merge .For subscriptions to merge publications, specify credentials on the Merge Agent Security page.

      Per informazioni sulle autorizzazioni richieste per ogni agente, vedere Replication Agent Security Model.For information about the permissions required by each agent, see Replication Agent Security Model.

  • Specificare una pianificazione della sincronizzazione e definire quando il Sottoscrittore dovrà essere inizializzato.Specify a synchronization schedule and when the Subscriber should be initialized.

  • Specificare le opzioni aggiuntive per le pubblicazioni di tipo merge: il tipo di sottoscrizione, i valori dei filtri con parametri e le informazioni per la sincronizzazione tramite HTTPS se la pubblicazione è abilitata per la sincronizzazione Web.Specify additional options for merge publications: subscription type; values for parameterized filtering; and information for synchronization through HTTPS if the publication is enabled for Web synchronization.

  • Specificare le opzioni aggiuntive per le pubblicazioni transazionali che consentono l'aggiornamento delle sottoscrizioni, indicando se si desidera che i Sottoscrittori eseguano immediatamente il commit delle modifiche nel server di pubblicazione o se devono aggiungerle a una coda e le credenziali utilizzate per stabilire una connessione dal Sottoscrittore al server di pubblicazione.Specify additional options for transactional publications that allow updating subscriptions: whether Subscribers should commit changes at the Publisher immediately or write them to a queue; credentials used to connect from the Subscriber to the Publisher.

  • Facoltativamente, creare lo script della sottoscrizione.Optionally script the subscription.

Per creare una sottoscrizione pull dal server di pubblicazioneTo create a pull subscription from the Publisher

  1. Connettersi al server di pubblicazione in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Publisher in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .Expand the Replication folder, and then expand the Local Publications folder.

  3. Fare clic con il pulsante destro del mouse sulla pubblicazione per la quale si desidera creare una o più sottoscrizioni e scegliere Nuove sottoscrizioni.Right-click the publication for which you want to create one or more subscriptions, and then click New Subscriptions.

  4. Completare i passaggi della Creazione guidata nuova sottoscrizione.Complete the pages in the New Subscription Wizard.

Per creare una sottoscrizione pull dal SottoscrittoreTo create a pull subscription from the Subscriber

  1. Connettersi al Sottoscrittore in SQL Server Management StudioSQL Server Management Studioe quindi espandere il nodo del server.Connect to the Subscriber in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Espandere la cartella Replica .Expand the Replication folder.

  3. Fare clic col pulsante destro del mouse sulla cartella Sottoscrizioni locali e quindi scegliere Nuove sottoscrizioni.Right-click the Local Subscriptions folder, and then click New Subscriptions.

  4. Nella pagina Pubblicazione della Creazione guidata nuova sottoscrizione selezionare <Trova server di pubblicazione SQL Server o <Trova server di pubblicazione Oracle> nell'elenco a discesa Server di pubblicazione.On the Publication page of the New Subscription Wizard, select <Find SQL Server Publisher> or <Find Oracle Publisher> from the Publisher drop-down list.

  5. Connettersi al server di pubblicazione nella finestra di dialogo Connetti a server .Connect to the Publisher in the Connect to Server dialog box.

  6. Selezionare una pubblicazione nella pagina Pubblicazione .Select a publication on the Publication page.

  7. Completare i passaggi della Creazione guidata nuova sottoscrizione.Complete the pages in the New Subscription Wizard.

Utilizzo di Transact-SQL Using Transact-SQL

È possibile creare sottoscrizioni pull a livello di programmazione tramite le stored procedure di replica.Pull subscriptions can be created programmatically using replication stored procedures. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene la sottoscrizione.The stored procedures used will depend on the type of publication to which the subscription belongs.

Per creare una sottoscrizione pull di una pubblicazione snapshot o transazionaleTo create a pull subscription to a snapshot or transactional publication

  1. Nel server di pubblicazione eseguire sp_helppublication (Transact-SQL) per verificare che la pubblicazione supporti le sottoscrizioni pull.At the Publisher, verify that the publication supports pull subscriptions by executing sp_helppublication (Transact-SQL).

    • Se il valore di allow_pull nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni pull.If the value of allow_pull in the result set is 1, then the publication supports pull subscriptions.

    • Se il valore di allow_pull è 0, eseguire sp_changepublication (Transact-SQL) specificando allow_pull per @property e true per @value.If the value of allow_pull is 0, execute sp_changepublication (Transact-SQL), specifying allow_pull for @property and true for @value.

  2. Nel Sottoscrittore eseguire sp_addpullsubscription (Transact-SQL).At the Subscriber, execute sp_addpullsubscription (Transact-SQL). Specificare @publisher e @publication.Specify @publisher and @publication. Per informazioni sull'aggiornamento delle sottoscrizioni, vedere Create an Updatable Subscription to a Transactional Publication.For information about updating subscriptions, see Create an Updatable Subscription to a Transactional Publication.

  3. Nel Sottoscrittore eseguire sp_addpullsubscription_agent (Transact-SQL).At the Subscriber, execute sp_addpullsubscription_agent (Transact-SQL). Specificare le opzioni seguenti:Specify the following:

    • I parametri @publisher, @publisher_dbe @publication .The @publisher, @publisher_db, and @publication parameters.

    • I parametri MicrosoftMicrosoft Windows per l'esecuzione dell'agente di distribuzione nel Sottoscrittore nei parametri @job_login e @job_password.The MicrosoftMicrosoft Windows credentials under which the Distribution Agent at the Subscriber runs for @job_login and @job_password.

      Nota

      Per le connessioni effettuate con l'autenticazione integrata di Windows vengono utilizzate sempre le credenziali di Windows specificate da @job_login e @job_password.Connections made using Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. L'agente di distribuzione attiva sempre la connessione locale al Sottoscrittore utilizzando l'autenticazione integrata di Windows.The Distribution Agent always makes the local connection to the Subscriber using Windows Integrated Authentication. Per impostazione predefinita, l'agente si connetterà al server di distribuzione con l'autenticazione integrata di Windows.By default, the agent will connect to the Distributor using Windows Integrated Authentication.

    • (Facoltativo) Il valore 0 per @distributor_security_mode e le informazioni sull'account di accesso di SQL Server per @distributor_login e @distributor_password, se è necessario usare l'autenticazione di SQL Server per la connessione al database di distribuzione.(Optional) A value of 0 for @distributor_security_mode and the SQL Server login information for @distributor_login and @distributor_password, if you need to use SQL Server Authentication when connecting to the Distributor.

    • Specificare una pianificazione per il processo dell'agente di distribuzione da eseguire per la sottoscrizione.A schedule for the Distribution Agent job for this subscription. Per altre informazioni, vedere Specify Synchronization Schedules.For more information, see Specify Synchronization Schedules.

  4. Nel server di pubblicazione eseguire sp_addsubscription (Transact-SQL) per registrare la sottoscrizione pull.At the Publisher, execute sp_addsubscription (Transact-SQL) to register the pull subscription. Specificare i parametri @publication, @subscribere @destination_db.Specify @publication, @subscriber, and @destination_db. Specificare il valore pull per @subscription_type.Specify a value of pull for @subscription_type.

Per creare una sottoscrizione pull di una pubblicazione di tipo mergeTo create a pull subscription to a merge publication

  1. Nel server di pubblicazione eseguire sp_helpmergepublication (Transact-SQL) per verificare che la pubblicazione supporti le sottoscrizioni pull.At the Publisher, verify that the publication supports pull subscriptions by executing sp_helpmergepublication (Transact-SQL).

    • Se il valore di allow_pull nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni pull.If the value of allow_pull in the result set is 1, then the publication supports pull subscriptions.

    • Se il valore di allow_pull è 0, eseguire sp_changemergepublication (Transact-SQL) specificando allow_pull per @property e true per @value.If the value of allow_pull is 0, execute sp_changemergepublication (Transact-SQL), specifying allow_pull for @property and true for @value.

  2. Nel Sottoscrittore eseguire sp_addmergepullsubscription (Transact-SQL).At the Subscriber, execute sp_addmergepullsubscription (Transact-SQL). Specificare i parametri @publisher, @publisher_db, @publicatione i parametri seguenti:Specify @publisher, @publisher_db, @publication, and the following parameters:

    • @subscriber_type : specificare local per una sottoscrizione client e global per una sottoscrizione server.@subscriber_type – specify local for a client subscription and global for a server subscription.

    • @subscription_priority : specificare la priorità della sottoscrizione (l'intervallo di valori consentito è compreso tra0,00 e 99,99).@subscription_priority – Specify a priority for the subscription (0.00 to 99.99). Questo parametro è obbligatorio solo per una sottoscrizione server.This is only required for a server subscription.

      Per altre informazioni, vedere Advanced Merge Replication Conflict Detection and Resolution.For more information, see Advanced Merge Replication Conflict Detection and Resolution.

  3. Nel Sottoscrittore eseguire sp_addmergepullsubscription_agent (Transact-SQL).At the Subscriber, execute sp_addmergepullsubscription_agent (Transact-SQL). Specificare i parametri seguenti:Specify the following parameters:

    • @publisher, @publisher_dbe @publication.@publisher, @publisher_db, and @publication.

    • Le credenziali di Windows per l'esecuzione dell'agente di merge nel Sottoscrittore nei parametri @job_login e @job_password.The Windows credentials under which the Merge Agent at the Subscriber runs for @job_login and @job_password.

      Nota

      Per le connessioni effettuate con l'autenticazione integrata di Windows vengono utilizzate sempre le credenziali di Windows specificate da @job_login e @job_password.Connections made using Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. L'agente di merge attiva sempre la connessione locale al Sottoscrittore utilizzando l'autenticazione integrata di Windows.The Merge Agent always makes the local connection to the Subscriber using Windows Integrated Authentication. Per impostazione predefinita, l'agente si connetterà al database di distribuzione e al server di pubblicazione con l'autenticazione integrata di Windows.By default, the agent will connect to the Distributor and Publisher using Windows Integrated Authentication.

    • (Facoltativo) Impostare il valore 0 per @distributor_security_mode e specificare le informazioni di accesso di SQL ServerSQL Server nei parametri @distributor_login e @distributor_password, se è necessario utilizzare l'autenticazione di SQL ServerSQL Server per la connessione al server di distribuzione.(Optional) A value of 0 for @distributor_security_mode and the SQL ServerSQL Server login information for @distributor_login and @distributor_password, if you need to use SQL ServerSQL Server Authentication when connecting to the Distributor.

    • (Facoltativo) Impostare il valore 0 per @publisher_security_mode e specificare le informazioni di accesso di SQL ServerSQL Server nei parametri @publisher_login e @publisher_password, se è necessario utilizzare l'autenticazione di SQL ServerSQL Server per la connessione al server di pubblicazione.(Optional) A value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password, if you need to use SQL ServerSQL Server Authentication when connecting to the Publisher.

    • Una pianificazione per il processo dell'agente di merge per la sottoscrizione.A schedule for the Merge Agent job for this subscription. Per altre informazioni, vedere Create an Updatable Subscription to a Transactional Publication.For more information, see Create an Updatable Subscription to a Transactional Publication.

  4. Nel server di pubblicazione eseguire sp_addmergesubscription (Transact-SQL).At the Publisher, execute sp_addmergesubscription (Transact-SQL). Specificare i parametri @publication, @subscriber, @subscriber_dbe il valore pull per @subscription_type.Specify @publication, @subscriber, @subscriber_db, and a value of pull for @subscription_type. In questo modo la sottoscrizione pull viene registrata.This registers the pull subscription.

Esempi (Transact-SQL) Examples (Transact-SQL)

Nell'esempio seguente viene creata una sottoscrizione pull di una pubblicazione transazionale.The following example creates a pull subscription to a transactional publication. Il primo batch viene eseguito nel Sottoscrittore e il secondo batch viene eseguito nel server di pubblicazione.The first batch is executed at the Subscriber, and the second batch is executed at the Publisher. I valori per l'account di accesso e la relativa password vengono specificati in fase di esecuzione tramite variabili di scripting sqlcmd.Login and password values are supplied at runtime using sqlcmd scripting variables.

-- 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  

Nell'esempio seguente viene creata una sottoscrizione pull di una pubblicazione di tipo merge.The following example creates a pull subscription to a merge publication. Il primo batch viene eseguito nel Sottoscrittore e il secondo batch viene eseguito nel server di pubblicazione.The first batch is executed at the Subscriber, and the second batch is executed at the Publisher. I valori per l'account di accesso e la relativa password vengono specificati in fase di esecuzione tramite variabili di scripting sqlcmd .Login and password values are supplied at runtime using sqlcmd scripting variables.

-- 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  

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

Le classi RMO utilizzate per la creazione di una sottoscrizione pull dipendono dal tipo di pubblicazione a cui appartiene la sottoscrizione.The RMO classes used to create a pull subscription depend on the type of publication to which the subscription belongs.

Per creare una sottoscrizione pull di una pubblicazione snapshot o transazionaleTo create a pull subscription to a snapshot or transactional publication

  1. Creare una connessione sia al Sottoscrittore che al server di pubblicazione tramite la classe ServerConnection .Create connections to both the Subscriber and Publisher by using the ServerConnection Class.

  2. Creare un'istanza della classe TransPublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the TransPublication class by using the Publisher connection from step 1. Specificare Name, DatabaseName e ConnectionContext.Specify Name, DatabaseName and ConnectionContext.

  3. Chiamare il metodo LoadProperties .Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Eseguire un'operazione con AND logico bit per bit (& in Visual C# e And in Visual Basic) tra la proprietà Attributes e AllowPull.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPull. Se il risultato è None, impostare Attributes sul risultato di un'operazione con OR logico bit per bit (| in Visual C# e Or in Visual Basic) tra Attributes e AllowPull.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPull. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni pull.Then, call CommitPropertyChanges to enable pull subscriptions.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database .If the subscription database does not exist, create it by using the Database class. Per altre informazioni, vedere Creazione, modifica e rimozione di database.For more information, see Creating, Altering, and Removing Databases.

  6. Creare un'istanza della classe TransPullSubscription .Create an instance of the TransPullSubscription class.

  7. Impostare le proprietà seguenti per la sottoscrizione:Set the following subscription properties:

  8. Chiamare il metodo Create .Call the Create method.

  9. Utilizzando l'istanza della classe TransPublication creata nel passaggio 2, chiamare il metodo MakePullSubscriptionWellKnown per registrare la sottoscrizione pull nel server di pubblicazione.Using the instance of the TransPublication class from step 2, call the MakePullSubscriptionWellKnown method to register the pull subscription with the Publisher. Se la registrazione esiste già, viene generata un'eccezione.If this registration already exists, an exception occurs.

Per creare una sottoscrizione pull di una pubblicazione di tipo mergeTo create a pull subscription to a merge publication

  1. Creare una connessione sia al Sottoscrittore che al server di pubblicazione tramite la classe ServerConnection .Create connections to both the Subscriber and Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe MergePublication utilizzando la connessione al server di pubblicazione creata nel passaggio 1.Create an instance of the MergePublication class by using the Publisher connection from step 1. Specificare Name, DatabaseNamee ConnectionContext.Specify Name, DatabaseName, and ConnectionContext.

  3. Chiamare il metodo LoadProperties .Call the LoadProperties method. Se il metodo restituisce false, le proprietà specificate nel passaggio 2 non sono corrette oppure la pubblicazione non esiste nel server.If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Eseguire un'operazione con AND logico bit per bit (& in Visual C# e And in Visual Basic) tra la proprietà Attributes e AllowPull.Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPull. Se il risultato è None, impostare Attributes sul risultato di un'operazione con OR logico bit per bit (| in Visual C# e Or in Visual Basic) tra Attributes e AllowPull.If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPull. Chiamare quindi CommitPropertyChanges per abilitare le sottoscrizioni pull.Then, call CommitPropertyChanges to enable pull subscriptions.

  5. Se il database di sottoscrizione non esiste, crearlo utilizzando la classe Database .If the subscription database does not exist, create it by using the Database class. Per altre informazioni, vedere Creazione, modifica e rimozione di database.For more information, see Creating, Altering, and Removing Databases.

  6. Creare un'istanza della classe MergePullSubscription .Create an instance of the MergePullSubscription class.

  7. Impostare le proprietà seguenti per la sottoscrizione:Set the following subscription properties:

  8. Chiamare il metodo Create .Call the Create method.

  9. Utilizzando l'istanza della classe MergePublication creata nel passaggio 2, chiamare il metodo MakePullSubscriptionWellKnown per registrare la sottoscrizione pull nel server di pubblicazione.Using the instance of the MergePublication class from step 2, call the MakePullSubscriptionWellKnown method to register the pull subscription with the Publisher. Se la registrazione esiste già, viene generata un'eccezione.If this registration already exists, an exception occurs.

Esempio (RMO) Example (RMO)

In questo esempio viene creata una sottoscrizione pull di una pubblicazione transazionale.This example creates a pull subscription to a transactional publication. Le credenziali dell'account di MicrosoftMicrosoft Windows utilizzate per creare il processo dell'agente di distribuzione vengono passate in fase di esecuzione.The MicrosoftMicrosoft Windows account credentials used to create the Distribution Agent job are passed at runtime.

// 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  

In questo esempio viene creata una sottoscrizione pull di una pubblicazione di tipo merge.This example creates a pull subscription to a merge publication. Le credenziali dell'account di Windows utilizzate per creare il processo dell'agente di merge vengono passate in fase di esecuzione.The Windows account credentials used to create the Merge Agent job are passed at runtime.

// 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  

In questo esempio viene creata una sottoscrizione pull di una pubblicazione di tipo merge senza creare un processo dell'agente associato e i metadati di sottoscrizione in MSsubscription_properties.This example creates a pull subscription to a merge publication without creating an associated agent job and subscription metadata in MSsubscription_properties. Le credenziali dell'account di Windows utilizzate per creare il processo dell'agente di merge vengono passate in fase di esecuzione.The Windows account credentials used to create the Merge Agent job are passed at runtime.

// 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.  
        // Subscripition 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.  
        ' Subscripition 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  

In questo esempio viene creata una sottoscrizione pull di una pubblicazione di tipo merge che può essere sincronizzata su Internet con la sincronizzazione Web.This example creates a pull subscription to a merge publication that can be synchronized over the Internet using Web synchronization. Le credenziali dell'account di Windows utilizzate per creare il processo dell'agente di merge vengono passate in fase di esecuzione.The Windows account credentials used to create the Merge Agent job are passed at runtime. Per altre informazioni, vedere Configure Web Synchronization.For more information, see Configure Web Synchronization.

// 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  

Vedere ancheSee Also

Concetti di base relativi a RMO (Replication Management Objects) Replication Management Objects Concepts
Visualizzare e modificare le proprietà delle sottoscrizioni pull View and Modify Pull Subscription Properties
Configure Web Synchronization Configure Web Synchronization
Sottoscrivere le pubblicazioni Subscribe to Publications
Replication Security Best PracticesReplication Security Best Practices