Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Este tópico descreve como criar uma subscrição push no SQL Server utilizando SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO). Para informações sobre como criar uma subscrição push para um Assinante que não seja SQL Server, veja Criar uma subscrição para um Assinante que não seja SQL Server.
Observação
A Instância Gerenciada SQL do Azure pode ser um editor, distribuidor e assinante para replicação de instantâneo e transacional. Os bancos de dados no Banco de Dados SQL do Azure só podem ser assinantes por push para replicação de instantâneo e transacional. Para obter mais informações, consulte Replicação transacional com o Banco de Dados SQL do Azure e a Instância Gerenciada SQL do Azure.
Usando o SQL Server Management Studio
Crie uma subscrição push no Publisher ou no Subscriber utilizando o Novo Assistente de Subscrição. Siga as páginas do feiticeiro para:
Especifique o editor e a publicação.
Selecione onde os agentes de replicação irão correr. Para uma subscrição push, selecione Executar todos os agentes no Distribuidor (subscrições push) na Localização do Agente de Distribuição ou na página de Localização do Agente de Fusão, dependendo do tipo de publicação.
Especifique Subscritores e bases de dados de subscrição.
Especifique os logins e palavras-passe usados para as ligações feitas pelos agentes de replicação:
Para subscrições às publicações snapshot e transacionais, especifique as credenciais na página de Segurança do Agente de Distribuição.
Para subscrições de publicações de fusão, especifique credenciais na página de Segurança do Agente de Fusão .
Para informações sobre as permissões que cada agente necessita, veja Modelo de segurança do agente de replicação.
Especifique um calendário de sincronização e quando o Assinante deve ser inicializado.
Especifique opções adicionais para publicações de fusão: tipo de subscrição e valores para filtragem parametrizada.
Especifique opções adicionais para publicações transacionais que permitam atualizar subscrições. Uma opção é decidir se os Assinantes devem aplicar as alterações imediatamente no Publicador ou escrevê-las numa fila. Outra opção é configurar credenciais usadas para conectar do Assinante ao Editor.
Opcionalmente, crie um script para a subscrição.
Para criar uma subscrição push a partir do Publicador
Liga-te ao Publisher no Microsoft SQL Server Management Studio e depois expande o nó do servidor.
Expanda a pasta Replicação e depois expanda a pasta Publicações Locais .
Clique com o botão direito na publicação para a qual pretende criar uma ou mais subscrições e depois selecione Novas Subscrições.
Complete as páginas no Assistente de Nova Subscrição.
Para criar uma subscrição push a partir do Assinante
Liga-te ao Assinante no SQL Server Management Studio e, em seguida, expande o nó do servidor.
Expande a pasta de Replicação .
Clique com o botão direito na pasta Local Subscriptions e depois selecione Novas Subscrições.
Na página Publicação do Assistente de Nova Subscrição, selecione <Encontrar Publicador SQL Server> ou <Encontrar Publicador Oracle> na lista suspensa Publicador.
Liga-te ao Publisher na caixa de diálogo Ligar ao Servidor .
Selecione uma publicação na página de Publicação .
Complete as páginas no Assistente de Nova Subscrição.
Usando Transact-SQL
Pode criar subscrições push programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados utilizados dependerão do tipo de publicação a que pertence a subscrição.
Importante
Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.
Para criar uma subscrição push para uma publicação de snapshot ou transacional
No Editor da base de dados de publicações, verifique se a publicação suporta subscrições push ao executar sp_helppublication.
Se o valor de allow_push for 1, são suportadas subscrições push.
Se o valor de allow_push for 0, execute sp_changepublication. Especifique allow_push para @property e true para @value.
No Servidor de Publicação, na base de dados de publicações, execute sp_addsubscription. Especifique @publication, @subscriber e @destination_db. Especifique um valor de push para @subscription_type. Para informações sobre como atualizar subscrições, consulte Criar uma subscrição atualizável para uma publicação transacional.
No Publicador, na base de dados de publicações, execute sp_addpushsubscription_agent. Especifique o seguinte:
Os parâmetros @subscriber, @subscriber_db e @publication .
As credenciais Microsoft Windows com as quais o Agente de Distribuição executa no Distribuidor para @job_login e @job_password.
Observação
As ligações feitas através da Autenticação Integrada do Windows utilizam sempre as credenciais do Windows especificadas por @job_login e @job_password. O Agente de Distribuição faz sempre a ligação local ao Distribuidor usando a Autenticação Integrada do Windows. Por defeito, o agente liga-se ao Assinante usando a Autenticação Integrada do Windows.
(Opcional) Um valor de 0 para @subscriber_security_mode e a informação de login do Microsoft SQL Server para @subscriber_login e @subscriber_password. Especifique estes parâmetros se precisar de usar autenticação SQL Server ao ligar-se ao assinante.
Um calendário para o trabalho de Agente de Distribuição para esta subscrição. Para mais informações, consulte Especificar horários de sincronização.
Importante
Quando está a criar uma subscrição push num Publisher com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo job_login e job_password, são enviados ao Distribuidor em texto simples. Deve encriptar a ligação entre o Publisher e o seu Distribuidor remoto antes de executar este procedimento armazenado. Para mais informações, consulte Habilitar ligações encriptadas ao motor de base de dados (SQL Server Configuration Manager).
Criar uma subscrição push para uma publicação de fusão
No Publicador na base de dados da publicação, verifique se a publicação suporta subscrições push executando sp_helpmergepublication.
Se o valor de allow_push for 1, a publicação suporta subscrições push.
Se o valor de allow_push não for igual a 1, execute sp_changemergepublication. Especifique allow_push para @property e true para @value.
No Publicador, na base de dados da publicação, execute sp_addmergesubscription. Especifique os parâmetros seguintes:
@publication. Este é o nome da publicação.
@subscriber_type. Para uma subscrição de cliente, especifique local. Para uma subscrição de servidor, especifique global.
@subscription_priority. Para uma subscrição de servidor, especifique uma prioridade para a subscrição (0,00 a 99,99).
Para mais informações, consulte Detecção e Resolução Avançada de Conflitos de Replicação Mesclada.
Na publicador na base de dados de publicações, execute sp_addmergepushsubscription_agent. Especifique o seguinte:
Os parâmetros @subscriber, @subscriber_db e @publication .
As credenciais do Windows sob as quais o Merge Agent do Distribuidor executa para @job_login e @job_password.
Observação
As ligações feitas através da Autenticação Integrada do Windows utilizam sempre as credenciais do Windows especificadas por @job_login e @job_password. O Merge Agent faz sempre a ligação local ao Distribuidor usando a Autenticação Integrada do Windows. Por padrão, o agente irá conectar-se ao Assinante usando a Autenticação Integrada do Windows.
(Opcional) Um valor de 0 para @subscriber_security_mode e a informação de login do SQL Server para @subscriber_login e @subscriber_password. Especifique estes parâmetros se precisar de usar autenticação SQL Server ao ligar-se ao assinante.
(Opcional) Um valor de 0 para @publisher_security_mode e a informação de login do SQL Server para @publisher_login e @publisher_password. Especifique estes valores se precisar de usar autenticação SQL Server ao ligar-se ao Publisher.
Um calendário para o trabalho de Merge Agent para esta subscrição. Para mais informações, consulte Especificar horários de sincronização.
Importante
Quando está a criar uma subscrição push num Publisher com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo job_login e job_password, são enviados ao Distribuidor em texto simples. Deve encriptar a ligação entre o Publisher e o seu Distribuidor remoto antes de executar este procedimento armazenado. Para mais informações, consulte Habilitar ligações encriptadas ao motor de base de dados (SQL Server Configuration Manager).
Exemplos (Transact-SQL)
O exemplo seguinte cria uma subscrição push para uma publicação transacional. Os valores de login e palavra-passe são fornecidos em tempo de execução através de variáveis de scripting 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
O exemplo seguinte cria uma subscrição push para uma publicação de fusão. Os valores de login e palavra-passe são fornecidos em tempo de execução através de variáveis de scripting 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
Utilização de Objetos de Gestão de Replicação
Pode criar subscrições push programaticamente usando Replication Management Objects (RMO). As classes RMO que utiliza para criar uma subscrição push dependem do tipo de publicação para a qual a subscrição foi criada.
Importante
Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se tiver de armazenar credenciais, utilize os serviços criptográficos que o Microsoft Windows .NET Framework fornece.
Para criar uma subscrição push para uma publicação de snapshot ou transacional
Crie uma ligação ao Editor usando a ServerConnection classe.
Crie uma instância da TransPublication classe usando a ligação Publisher do passo 1. Especifique Name, DatabaseName, e ConnectionContext.
Chame o método LoadProperties. Se este método devolver falso, ou as propriedades especificadas no passo 2 estão incorretas ou a publicação não existe no servidor.
Execute um AND lógico bit a bit (& em Visual C# e And em Visual Basic) entre a Attributes propriedade e AllowPush. Se o resultado for None, defina Attributes para o resultado de um OR lógico bit a bit (| em Visual C# e Or em Visual Basic ) entre Attributes e AllowPush. Depois, liga CommitPropertyChanges para ativar subscrições push.
Se a base de dados de subscrição não existir, crie-a usando a Database classe. Para mais informações, veja Crear, alterar e remover bases de dados.
Cria uma instância da TransSubscription classe.
Defina as seguintes propriedades de subscrição:
No passo 1, o ServerConnection para o Editor foi criado para ConnectionContext.
Nome da base de dados de subscrição para SubscriptionDBName.
Nome do assinante para SubscriberName.
Nome da base de dados de publicações para DatabaseName.
Nome da publicação para PublicationName.
Os campos Login e Password de SynchronizationAgentProcessSecurity fornecem as credenciais da conta Microsoft Windows sob a qual o Agente de Distribuição opera no Distribuidor. Esta conta é usada para estabelecer ligações locais ao Distribuidor e para efetuar ligações remotas através da Autenticação do Windows.
Observação
A definição
não é obrigatória quando a subscrição é criada por um membro da função fixa de administrador do sistema , mas recomendamos esta configuração. Neste caso, o agente irá fazer-se passar pela conta do Agente SQL Server. Para mais informações, consulte o modelo de segurança do Replication Agent. (Opcional) Um valor de true (o padrão) para CreateSyncAgentByDefault criar um job agente que é usado para sincronizar a subscrição. Se especificar falso, a subscrição só pode ser sincronizada programaticamente.
(Opcional) Defina o WindowsAuthentication para Falso, SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword ao usar SubscriberSecurity Autenticação SQL Server para conectar-se ao Assinante.
Chame o método Create.
Importante
Quando está a criar uma subscrição push num Publisher com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SynchronizationAgentProcessSecurity, são enviados ao Distribuidor em texto simples. Deves encriptar a ligação entre o Publisher e o seu distribuidor remoto antes de chamar o Create método. Para mais informações, consulte Habilitar ligações encriptadas ao motor de base de dados (SQL Server Configuration Manager).
Criar uma subscrição push para uma publicação de fusão
Crie uma ligação ao Editor usando a ServerConnection classe.
Crie uma instância da MergePublication classe usando a ligação Publisher do passo 1. Especifique Name, DatabaseName, e ConnectionContext.
Chame o método LoadProperties. Se este método devolver falso, ou as propriedades especificadas no passo 2 estão incorretas ou a publicação não existe no servidor.
Execute um AND lógico bit a bit (& em Visual C# e And em Visual Basic) entre a propriedade Attributes e AllowPush. Se o resultado for None, defina Attributes para o resultado de um OR lógico bit a bit (| em Visual C# e Or em Visual Basic ) entre Attributes e AllowPush. Depois, liga CommitPropertyChanges para ativar subscrições push.
Se a base de dados de subscrição não existir, crie-a usando a Database classe. Para mais informações, veja Crear, alterar e remover bases de dados.
Cria uma instância da MergeSubscription classe.
Defina as seguintes propriedades de subscrição:
O ServerConnection para o Editor criado no passo 1 para ConnectionContext.
Nome da base de dados de subscrição para SubscriptionDBName.
Nome do assinante para SubscriberName.
Nome da base de dados de publicações para DatabaseName.
Nome da publicação para PublicationName.
Os campos Login e Password de SynchronizationAgentProcessSecurity destinam-se a fornecer as credenciais da conta Microsoft Windows sob a qual o Agente de Mesclagem é executado no Distribuidor. Esta conta é usada para fazer ligações locais ao Distribuidor e para efetuar ligações remotas através da Autenticação do Windows.
Observação
A definição SynchronizationAgentProcessSecurity não é obrigatória quando a subscrição é criada por um membro da função de servidor fixo sysadmin, mas recomendamos fazê-lo. Neste caso, o agente irá adotar a identidade da conta do Agente do SQL Server. Para mais informações, consulte o modelo de segurança do Replication Agent.
(Opcional) Um valor de true (o padrão) para CreateSyncAgentByDefault criar uma tarefa de agente que é usada para sincronizar a assinatura. Se especificar falso, a subscrição só pode ser sincronizada programaticamente.
(Opcional) Configure os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword de SubscriberSecurity ao utilizar a Autenticação SQL Server para se conectar ao Assinante.
(Opcional) Defina o campo WindowsAuthentication como Falso e os campos SqlStandardLogin e SqlStandardPassword ou SecureSqlStandardPassword, de PublisherSecurity, quando usar a autenticação do SQL Server para se ligar ao Publisher.
Chame o método Create.
Importante
Quando está a criar uma subscrição push num Publisher com um Distribuidor remoto, os valores fornecidos para todas as propriedades, incluindo SynchronizationAgentProcessSecurity, são enviados ao Distribuidor em texto simples. Deves encriptar a ligação entre o Publisher e o seu distribuidor remoto antes de chamar o Create método. Para mais informações, consulte Habilitar ligações encriptadas ao motor de base de dados (SQL Server Configuration Manager).
Exemplos (RMO)
Este exemplo cria uma nova subscrição push para uma publicação transacional. As credenciais da conta Windows que usas para executar o trabalho do Agente de Distribuição são passadas em tempo de execução.
// 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
Este exemplo cria uma nova subscrição push para uma publicação de fusão. As credenciais da conta Windows que usas para executar o trabalho do Merge Agent são passadas em tempo de execução.
// 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