Compartir a través de


Crear una suscripción de inserción

Se aplica a: SQL Server Azure SQL Database

En este tema se describe cómo crear una suscripción de inserción en SQL Server mediante SQL Server Management Studio, Transact-SQL o Replication Management Objects (RMO). Para más información sobre cómo crear una suscripción de inserción para un suscriptor que no sea de SQL Server, vea Crear una suscripción para un suscriptor que no sea de SQL Server.

Nota:

Azure SQL Managed Instance puede ser un publicador, un distribuidor y un suscriptor para la replicación transaccional y de instantáneas. Las bases de datos de Azure SQL Database solo pueden ser suscriptores de extracción para la replicación transaccional y de instantáneas. Para obtener más información, vea Replicación transaccional con Azure SQL Database y Azure SQL Managed Instance.

Uso de SQL Server Management Studio

Cree una suscripción de inserción en el publicador o en el suscriptor con el Asistente para nuevas suscripciones. Siga las páginas del asistente para:

  • Especificar el publicador y la publicación.

  • Seleccionar dónde se ejecutarán los agentes de replicación. Para una suscripción de inserción, seleccione Ejecutar todos los agentes en el distribuidor (suscripciones de inserción) en la página Ubicación del Agente de distribución o Ubicación del Agente de mezcla , dependiendo del tipo de publicación.

  • Especificar suscriptores y bases de datos de suscripciones.

  • Especifique los nombres de inicio de sesión y las contraseñas que se utilizan para las conexiones realizadas por los agentes de replicación:

    • Para las suscripciones a publicaciones de instantáneas y transaccionales, especifique las credenciales en la página Seguridad del Agente de distribución .

    • Para las suscripciones a publicaciones de combinación, especifique las credenciales en la página Seguridad del Agente de mezcla .

      Para obtener información acerca de los permisos que necesita cada agente, vea Modelo de seguridad del Agente de replicación.

  • Especifique una programación de sincronización y cuándo se debe inicializar el suscriptor.

  • Especifique otras opciones para las publicaciones de combinación: el tipo de suscripción y los valores para los filtros con parámetros.

  • Especifique opciones adicionales para las publicaciones transaccionales que permiten suscripciones de actualización. Una opción es decidir si los suscriptores deben confirmar los cambios inmediatamente en el publicador o escribirlos en una cola. Otra opción consiste en configurar las credenciales utilizadas para conectarse del suscriptor al publicador.

  • Opcionalmente, puede crear un script para la suscripción.

Para crear una suscripción de inserción desde el publicador

  1. Conéctese al publicador en Microsoft SQL Server Management Studio y, a continuación, expanda el nodo del servidor.

  2. Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .

  3. Haga clic con el botón secundario en la publicación en la que quiera crear una o varias suscripciones y, a continuación, seleccione Nuevas suscripciones.

  4. Complete las páginas del Asistente para nuevas suscripciones.

Para crear una suscripción de inserción desde el suscriptor

  1. Conéctese al suscriptor en SQL Server Management Studio y expanda el nodo de servidor.

  2. Expanda la carpeta Replicación .

  3. Haga clic con el botón secundario en la carpeta Suscripciones locales y, a continuación, seleccione Nuevas suscripciones.

  4. En la página Publicación del Asistente para nuevas suscripciones, seleccione <Buscar publicador de SQL Server> o <Buscar publicador de Oracle> de la lista desplegable Publicador.

  5. Conéctese al publicador en el cuadro de diálogo Conectar al servidor .

  6. Seleccione una publicación en la página Publicación .

  7. Complete las páginas del Asistente para nuevas suscripciones.

Usar Transact-SQL

Las suscripciones de inserción se pueden crear mediante programación usando procedimientos almacenados de replicación. Los procedimientos almacenados que se usen dependerán del tipo de publicación a la que corresponda la suscripción.

Importante

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.

Para crear una suscripción de inserción para una publicación de instantáneas o transaccional

  1. En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_push es 1, se admiten las suscripciones de inserción.

    • Si el valor de allow_push es 0, ejecute sp_changepublication. Especifique allow_push para @property y true para @value.

  2. En el publicador de la base de datos de publicaciones, ejecute sp_addsubscription. Especifique @publication, @subscribery @destination_db. Especifique un valor push para @subscription_type. Para obtener información sobre cómo actualizar suscripciones, vea Crear una suscripción actualizable en una publicación transaccional.

  3. En el publicador de la base de datos de publicaciones, ejecute sp_addpushsubscription_agent. Especifique lo siguiente:

    • Los parámetros @subscriber, @subscriber_dby @publication .

    • Las credenciales de Windows con las que se ejecuta el Agente de distribución en el distribuidor para @job_login y @job_password.

      Nota:

      Las conexiones que se realicen a través de la Autenticación integrada de Windows siempre usarán las credenciales de Windows que especifican @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el distribuidor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conectará con el suscriptor mediante la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de Microsoft SQL Server para @subscriber_login y @subscriber_password. Especifique estos parámetros si necesita usar Autenticación de SQL Server al conectarse al suscriptor.

    • Una programación para el trabajo del Agente de distribución de esta suscripción. Para obtener más información, consulte Especificar programaciones de sincronización.

Importante

Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).

Para crear una suscripción de inserción para una publicación de combinación

  1. En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helpmergepublication.

    • Si el valor de allow_push es 1, la publicación admite operaciones de inserción.

    • Si el valor de allow_push no es 1, ejecute sp_changemergepublication. Especifique allow_push para @property y true para @value.

  2. En la base de datos de publicación del publicador, ejecute sp_addmergesubscription. Especifique los parámetros siguientes:

    • @publication. Éste es el nombre de la publicación.

    • @subscriber_type. Para una suscripción de cliente, especifique local. Para una suscripción de servidor, especifique global.

    • @subscription_priority. Para una suscripción de servidor, especifique una prioridad para la suscripción (de0,00 a 99,99).

    Para más información, consulte Detección y resolución de conflictos de replicación de mezcla avanzada.

  3. En el publicador de la base de datos de publicaciones, ejecute sp_addmergepushsubscription_agent. Especifique lo siguiente:

    • Los parámetros @subscriber, @subscriber_dby @publication .

    • Las credenciales de Windows con las que se ejecuta el Agente de mezcla en el distribuidor para @job_login y @job_password.

      Nota:

      Las conexiones que se realicen a través de la Autenticación integrada de Windows siempre usarán las credenciales de Windows que especifican @job_login y @job_password. El Agente de mezcla siempre realiza la conexión local con el distribuidor mediante la Autenticación integrada de Windows. De forma predeterminada, el agente se conectará con el suscriptor mediante la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password. Especifique estos parámetros si necesita usar Autenticación de SQL Server al conectarse al suscriptor.

    • (Opcional) El valor 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Especifique estos valores si necesita usar Autenticación de SQL Server al conectarse al publicador.

    • Una programación para el Agente de mezcla para la suscripción. Para obtener más información, consulte Especificar programaciones de sincronización.

Importante

Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).

Ejemplos (Transact-SQL)

El siguiente ejemplo crea una suscripción de inserción en una publicación transaccional. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución a través de variables de scripting de 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

El siguiente ejemplo crea una suscripción de inserción en una publicación de combinación. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución a través de variables de scripting de 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;
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

Uso de Replication Management Objects

Las suscripciones de inserción se pueden crear mediante programación usando Replication Management Objects (RMO). Las clases RMO que se utilizan para crear una suscripción de inserción dependen del tipo de publicación para el que se crea la suscripción.

Importante

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar credenciales, use los servicios de cifrado proporcionados por Microsoft Windows .NET Framework.

Para crear una suscripción de inserción para una publicación de instantáneas o transaccional

  1. Cree una conexión al publicador mediante la clase ServerConnection .

  2. Cree una instancia de la clase TransPublication con la conexión de publicador del paso 1. Especifique Name, DatabaseNamey ConnectionContext.

  3. Llame al método LoadProperties. Si este método devuelve false, las propiedades especificadas en el paso 2 son incorrectas o la publicación no existe en el servidor.

  4. Ejecuta una operación lógica AND bit a bit (& en Visual C# y And en Visual Basic) entre la propiedad Attributes y AllowPush. Si el resultado es None, establezca Attributes en el resultado de una operación lógica OR bit a bit (| en Visual C# y Or en Visual Basic) entre Attributes y AllowPush. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de inserción.

  5. Si la base de datos de suscripciones no existe, créela con la clase Database . Para obtener más información, consulte Crear, modificar y eliminar bases de datos.

  6. Cree una instancia de la clase TransSubscription.

  7. Establezca las siguientes propiedades de la suscripción:

  8. Llame al método Create.

Importante

Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores proporcionados para todas las propiedades, incluido SynchronizationAgentProcessSecurity, se envían al distribuidor como texto simple. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de llamar al método Create . Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).

Para crear una suscripción de inserción para una publicación de combinación

  1. Cree una conexión al publicador mediante la clase ServerConnection .

  2. Cree una instancia de la clase MergePublication con la conexión de publicador del paso 1. Especifique Name, DatabaseNamey ConnectionContext.

  3. Llame al método LoadProperties. Si este método devuelve false, las propiedades especificadas en el paso 2 son incorrectas o la publicación no existe en el servidor.

  4. Ejecuta una operación lógica AND bit a bit (& en Visual C# y And en Visual Basic) entre la propiedad Attributes y AllowPush. Si el resultado es None, establezca Attributes en el resultado de una operación lógica OR bit a bit (| en Visual C# y Or en Visual Basic) entre Attributes y AllowPush. A continuación, llame a CommitPropertyChanges para habilitar las suscripciones de inserción.

  5. Si la base de datos de suscripciones no existe, créela con la clase Database . Para obtener más información, consulte Crear, modificar y eliminar bases de datos.

  6. Cree una instancia de la clase MergeSubscription.

  7. Establezca las siguientes propiedades de la suscripción:

  8. Llame al método Create.

Importante

Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores proporcionados para todas las propiedades, incluido SynchronizationAgentProcessSecurity, se envían al distribuidor como texto simple. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de llamar al método Create . Para obtener más información, vea Habilitar conexiones cifradas en el motor de base de datos (Administrador de configuración de SQL Server).

Ejemplos (RMO)

En este ejemplo se crea una suscripción de inserción para una publicación transaccional. Las credenciales de la cuenta de Windows utilizada para ejecutar el trabajo del Agente de distribución se pasan en tiempo de ejecución.

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

En este ejemplo se crea una suscripción de inserción para una publicación de combinación. Las credenciales de la cuenta de Windows utilizada para ejecutar el trabajo del Agente de mezcla se pasan en tiempo de ejecución.

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