Skapa en push-prenumeration

gäller för:SQL ServerAzure SQL Database

Det här avsnittet beskriver hur du skapar en push-prenumeration i SQL Server med hjälp av SQL Server Management Studio, Transact-SQL eller Replikeringshanteringsobjekt (RMO). Information om hur du skapar en push-prenumeration för en icke-SQL Server-prenumerant finns i Skapa en prenumeration för en icke-SQL Server-prenumerant.

Anmärkning

Azure SQL Managed Instance kan vara utgivare, distributör och prenumerant för replikering av ögonblicksbilder och transaktioner. Databaser i Azure SQL Database kan bara skicka prenumeranter för ögonblicksbilder och transaktionsreplikering. Mer information finns i Transaktionsreplikering med Azure SQL Database och Azure SQL Managed Instance.

Använda SQL Server Management Studio

Skapa en push-prenumeration i Publisher eller Prenumeranten med hjälp av guiden Ny prenumeration. Följ stegen på sidorna i guiden för att:

  • Ange Utgivare och publikation.

  • Välj var replikeringsagenter ska köras. För en push-prenumeration väljer du Kör alla agenter på distributören (push-prenumerationer)Distributionsagentposition eller Slå samman agentposition, beroende på typen av publikation.

  • Ange prenumeranter och prenumerationsdatabaser.

  • Ange inloggningar och lösenord som används för anslutningar som görs av replikeringsagenter:

    • För prenumerationer på ögonblicksbilder och transaktionspublikationer, ange autentiseringsuppgifter på sidan Distributionsagentens säkerhet.

    • För prenumerationer för sammanslagning av publikationer anger du autentiseringsuppgifter på sidan Slå samman agentsäkerhet .

      Information om de behörigheter som varje agent kräver finns i Säkerhetsmodell för replikeringsagent.

  • Ange ett synkroniseringsschema och när prenumeranten ska initieras.

  • Ange ytterligare alternativ för sammanslagning av publikationer: prenumerationstyp och värden för parametriserad filtrering.

  • Ange ytterligare alternativ för transaktionspublikationer som tillåter uppdatering av prenumerationer. Man kan bestämma om Prenumeranter ska begå ändringar hos Publiceraren omedelbart eller skriva dem till en kö. Ett annat alternativ är att konfigurera autentiseringsuppgifter som används för att ansluta från Prenumeranten till utgivaren.

  • Du kan också skripta prenumerationen.

Skapa en push-prenumeration från Publisher

  1. Anslut till utgivaren i Microsoft SQL Server Management Studio och expandera sedan servernoden.

  2. Expandera mappen Replikering och expandera sedan mappen Lokala publikationer .

  3. Högerklicka på publikationen som du vill skapa en eller flera prenumerationer för och välj sedan Nya prenumerationer.

  4. Slutför sidorna i guiden Ny prenumeration.

Så här skapar du en push-prenumeration från prenumeranten

  1. Anslut till prenumeranten i SQL Server Management Studio och expandera sedan servernoden.

  2. Expandera mappen Replikering .

  3. Högerklicka på mappen Lokala prenumerationer och välj sedan Nya prenumerationer.

  4. På sidan Publikation i guiden Ny prenumeration väljer du <Hitta SQL Server Publisher> eller <Hitta Oracle Publisher> i listrutan Publisher .

  5. Anslut till utgivaren i dialogrutan Anslut till server .

  6. Välj en publikation på sidan Publikation .

  7. Slutför sidorna i guiden för ny prenumeration.

Använda Transact-SQL

Du kan skapa push-prenumerationer programmatiskt med hjälp av replikerings lagrade procedurer. De lagrade procedurer som används beror på vilken typ av publikation som prenumerationen tillhör.

Viktigt!

När det är möjligt uppmanar du användarna att ange säkerhetsautentiseringsuppgifter vid körning. Om du måste lagra autentiseringsuppgifter i en skriptfil måste du skydda filen för att förhindra obehörig åtkomst.

Skapa en push-prenumeration till en snapshot eller transaktionspublikation

  1. Kontrollera att publikationen stöder push-prenumerationer genom att köra sp_helppublication på publikationsdatabasen.

    • Om värdet för allow_push är 1 stöds push-prenumerationer.

    • Om värdet för allow_push är 0 kör du sp_changepublication. Ange allow_push för @property och true för @value.

  2. Kör sp_addsubscription i Publisher på publikationsdatabasen. Ange @publication, @subscriber och @destination_db. Ange värdet push för @subscription_type. Information om hur du uppdaterar prenumerationer finns i Skapa en updatable-prenumeration till en transaktionspublikation.

  3. Kör sp_addpushsubscription_agent i Publisher på publikationsdatabasen. Ange följande:

    • Parametrarna @subscriber, @subscriber_db och @publication.

    • Inloggningsuppgifterna för Microsoft Windows som distributionsagenten på distributören kör för @job_login och @job_password.

      Anmärkning

      Anslutningar som görs via Windows-integrerad autentisering använder alltid de Windows-autentiseringsuppgifter som anges av @job_login och @job_password. Distributionsagenten upprättar alltid den lokala anslutningen till distributören med hjälp av Windows-integrerad autentisering. Som standard ansluter agenten till prenumeranten med hjälp av Windows-integrerad autentisering.

    • (Valfritt) Värdet 0 för @subscriber_security_mode och Inloggningsinformation för Microsoft SQL Server för @subscriber_login och @subscriber_password. Ange dessa parametrar om du behöver använda SQL Server-autentisering när du ansluter till prenumeranten.

    • Ett schema för distributionsagentjobbet för den här prenumerationen. Mer information finns i Ange synkroniseringsscheman.

Viktigt!

När du skapar en push-prenumeration hos en utgivare med en fjärransluten distributör skickas de värden som anges för alla parametrar, inklusive job_login och job_password, till distributören som oformaterad text. Du bör kryptera anslutningen mellan utgivaren och dess fjärranslutna distributör innan du kör den här lagrade proceduren. Mer information finns i Aktivera krypterade anslutningar till databasmotorn (SQL Server Configuration Manager).

Skapa en push-prenumeration till en sammanslagningspublikation

  1. Kontrollera att publikationen stöder push-prenumerationer genom att köra sp_helpmergepublication på publikationsdatabasen.

    • Om värdet för allow_push är 1 stöder publikationen push-prenumerationer.

    • Om värdet för allow_push inte är 1 kör du sp_changemergepublication. Ange allow_push för @property och true för @value.

  2. Kör sp_addmergesubscription i Publisher på publikationsdatabasen. Ange följande parametrar:

    • @publication. Det här är namnet på publikationen.

    • @subscriber_type. För en klientprenumeration anger du lokal. För en serverprenumeration anger du global.

    • @subscription_priority. För en serverprenumeration anger du en prioritet för prenumerationen (0,00 till 99,99).

    Mer information finns i Avancerad konfliktidentifiering och hantering vid replikering.

  3. Kör sp_addmergepushsubscription_agent i Publisher på publikationsdatabasen. Ange följande:

    • Parametrarna @subscriber, @subscriber_db och @publication.

    • Windows-autentiseringsuppgifterna som sammanslagningsagenten på distributören kör för @job_login och @job_password.

      Anmärkning

      Anslutningar som görs via Windows-integrerad autentisering använder alltid de Windows-autentiseringsuppgifter som anges av @job_login och @job_password. Sammanslagningsagenten upprättar alltid den lokala anslutningen till distributören med hjälp av Windows-integrerad autentisering. Som standard ansluter agenten till prenumeranten med hjälp av Windows-integrerad autentisering.

    • (Valfritt) Värdet 0 för @subscriber_security_mode och SQL Server-inloggningsinformationen för @subscriber_login och @subscriber_password. Ange dessa parametrar om du behöver använda SQL Server-autentisering när du ansluter till prenumeranten.

    • (Valfritt) Värdet 0 för @publisher_security_mode och SQL Server-inloggningsinformationen för @publisher_login och @publisher_password. Ange dessa värden om du behöver använda SQL Server-autentisering när du ansluter till Publisher.

    • Ett schema för sammanslagningsagentens arbete för den här prenumerationen. Mer information finns i Ange synkroniseringsscheman.

Viktigt!

När du skapar en push-prenumeration hos en utgivare med en fjärransluten distributör skickas de värden som anges för alla parametrar, inklusive job_login och job_password, till distributören som oformaterad text. Du bör kryptera anslutningen mellan utgivaren och dess fjärranslutna distributör innan du kör den här lagrade proceduren. Mer information finns i Aktivera krypterade anslutningar till databasmotorn (SQL Server Configuration Manager).

Exempel (Transact-SQL)

I följande exempel skapas en push-prenumeration till en transaktionspublikation. Inloggningsvärden och lösenord tillhandahålls vid körningstid genom skriptvariabler i sqlcmd.

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

I följande exempel skapas en push-prenumeration till en sammanslagningspublikation. Inloggnings- och lösenordsvärden anges vid körning genom sqlcmd skriptvariabler.

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2022];
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Använda replikeringshanteringsobjekt

Du kan skapa push-prenumerationer programmatiskt med hjälp av Replikeringshanteringsobjekt (RMO). De RMO-klasser som du använder för att skapa en push-prenumeration beror på vilken typ av publikation som prenumerationen skapas till.

Viktigt!

När det är möjligt uppmanar du användarna att ange säkerhetsautentiseringsuppgifter vid körning. Om du måste lagra autentiseringsuppgifter använder du de kryptografiska tjänster som Microsoft Windows .NET Framework tillhandahåller.

Skapa en push-prenumeration för en snapshot eller transaktionspublikation

  1. Skapa en anslutning till Publisher med hjälp ServerConnection av klassen .

  2. Skapa en instans av TransPublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseNameoch ConnectionContext.

  3. Anropa LoadProperties metoden. Om den här metoden returnerar false är antingen egenskaperna som anges i steg 2 felaktiga eller så finns publikationen inte på servern.

  4. Utför en bitvis logisk AND (& i Visual C# och And in Visual Basic) mellan Attributes egenskapen och AllowPush. Om resultatet är Noneanger du Attributes till resultatet av en bitvis logisk OR (| i Visual C# och Eller i Visual Basic) mellan Attributes och AllowPush. Anropa CommitPropertyChanges sedan för att aktivera push-prenumerationer.

  5. Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . Mer information finns i Skapa, ändra och ta bort databaser.

  6. Skapa en instans av TransSubscription klassen.

  7. Ange följande prenumerationsegenskaper:

  8. Anropa Create metoden.

Viktigt!

När du skapar en push-prenumeration hos en utgivare med en fjärransluten distributör skickas värdena för alla egenskaper, inklusive SynchronizationAgentProcessSecurity, till distributören som oformaterad text. Du bör kryptera anslutningen mellan Publisher och dess fjärranslutna distributör innan du Create anropar metoden. Mer information finns i Aktivera krypterade anslutningar till databasmotorn (SQL Server Configuration Manager).

Skapa en push-prenumeration till en sammanslagningspublikation

  1. Skapa en anslutning till Publisher med hjälp ServerConnection av klassen .

  2. Skapa en instans av MergePublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseNameoch ConnectionContext.

  3. Anropa LoadProperties metoden. Om den här metoden returnerar false är antingen egenskaperna som anges i steg 2 felaktiga eller så finns publikationen inte på servern.

  4. Utför en bitvis logisk AND (& i Visual C# och And in Visual Basic) mellan Attributes egenskapen och AllowPush. Om resultatet är Noneanger du Attributes till resultatet av en bitvis logisk OR (| i Visual C# och Eller i Visual Basic) mellan Attributes och AllowPush. Anropa CommitPropertyChanges sedan för att aktivera push-prenumerationer.

  5. Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . Mer information finns i Skapa, ändra och ta bort databaser.

  6. Skapa en instans av MergeSubscription klassen.

  7. Ange följande prenumerationsegenskaper:

  8. Anropa Create metoden.

Viktigt!

När du skapar en push-prenumeration hos en utgivare med en fjärransluten distributör skickas värdena för alla egenskaper, inklusive SynchronizationAgentProcessSecurity, till distributören som oformaterad text. Du bör kryptera anslutningen mellan Publisher och dess fjärranslutna distributör innan du Create anropar metoden. Mer information finns i Aktivera krypterade anslutningar till databasmotorn (SQL Server Configuration Manager).

Exempel (RMO)

Det här exemplet skapar en ny push-prenumeration till en transaktionspublikation. Autentiseringsuppgifterna för Windows-kontot som du använder för att köra distributionsagentjobbet skickas vid körning.

           // Define the Publisher, publication, and databases.
           string publicationName = "AdvWorksProductTran";
           string publisherName = publisherInstance;
           string subscriberName = subscriberInstance;
           string subscriptionDbName = "AdventureWorks2022Replica";
           string publicationDbName = "AdventureWorks2022";

           //Create a connection to the Publisher.
           ServerConnection conn = new ServerConnection(publisherName);

           // Create the objects that we need.
           TransPublication publication;
           TransSubscription subscription;

           try
           {
               // Connect to the Publisher.
               conn.Connect();

               // Ensure that the publication exists and that 
               // it supports push subscriptions.
               publication = new TransPublication();
               publication.Name = publicationName;
               publication.DatabaseName = publicationDbName;
               publication.ConnectionContext = conn;

               if (publication.IsExistingObject)
               {
                   if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
                   {
                       publication.Attributes |= PublicationAttributes.AllowPush;
                   }

                   // Define the push subscription.
                   subscription = new TransSubscription();
                   subscription.ConnectionContext = conn;
                   subscription.SubscriberName = subscriberName;
                   subscription.PublicationName = publicationName;
                   subscription.DatabaseName = publicationDbName;
                   subscription.SubscriptionDBName = subscriptionDbName;

                   // Specify the Windows login credentials for the Distribution Agent job.
                   subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
                   subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                   // 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 push subscription.
                   subscription.Create();
               }
               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
           {
               conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' 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 push subscription.
        subscription.Create()
    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
    conn.Disconnect()
End Try

Det här exemplet skapar en ny push-prenumeration till en sammanslagningspublikation. Autentiseringsuppgifterna för Windows-kontot som du använder för att köra Merge Agent-jobbet överförs vid körningstid.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
string publicationDbName = "AdventureWorks2022";
string hostname = @"adventure-works\garrett1";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Ensure that the publication exists and that 
    // it supports push subscriptions.
    publication = new MergePublication();
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;
    publication.ConnectionContext = conn;

    if (publication.IsExistingObject)
    {
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Define the push subscription.
        subscription = new MergeSubscription();
        subscription.ConnectionContext = conn;
        subscription.SubscriberName = subscriberName;
        subscription.PublicationName = publicationName;
        subscription.DatabaseName = publicationDbName;
        subscription.SubscriptionDBName = subscriptionDbName;
        subscription.HostName = hostname;

        // Set a schedule to synchronize the subscription every 2 hours
        // during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
        subscription.AgentSchedule.FrequencySubDayInterval = 2;
        subscription.AgentSchedule.ActiveStartDate = 20051108;
        subscription.AgentSchedule.ActiveEndDate = 20071231;
        subscription.AgentSchedule.ActiveStartTime = 060000;
        subscription.AgentSchedule.ActiveEndTime = 100000;

        // Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

        // Create the push subscription.
        subscription.Create();
    }
    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
{
    conn.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 = "AdventureWorks2022Replica"
Dim publicationDbName As String = "AdventureWorks2022"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    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
    conn.Disconnect()
End Try