Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure 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) på 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
Anslut till utgivaren i Microsoft SQL Server Management Studio och expandera sedan servernoden.
Expandera mappen Replikering och expandera sedan mappen Lokala publikationer .
Högerklicka på publikationen som du vill skapa en eller flera prenumerationer för och välj sedan Nya prenumerationer.
Slutför sidorna i guiden Ny prenumeration.
Så här skapar du en push-prenumeration från prenumeranten
Anslut till prenumeranten i SQL Server Management Studio och expandera sedan servernoden.
Expandera mappen Replikering .
Högerklicka på mappen Lokala prenumerationer och välj sedan Nya prenumerationer.
På sidan Publikation i guiden Ny prenumeration väljer du <Hitta SQL Server Publisher> eller <Hitta Oracle Publisher> i listrutan Publisher .
Anslut till utgivaren i dialogrutan Anslut till server .
Välj en publikation på sidan Publikation .
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
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.
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.
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
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.
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.
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
Skapa en anslutning till Publisher med hjälp ServerConnection av klassen .
Skapa en instans av TransPublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseNameoch ConnectionContext.
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.
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.
Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . Mer information finns i Skapa, ändra och ta bort databaser.
Skapa en instans av TransSubscription klassen.
Ange följande prenumerationsegenskaper:
ServerConnection Till utgivaren som skapades i steg 1 för ConnectionContext.
Namnet på prenumerationsdatabasen för SubscriptionDBName.
Namnet på prenumeranten för SubscriberName.
Namnet på publikationsdatabasen för DatabaseName.
Namnet på publikationen för PublicationName.
Fälten LoginPassword och SynchronizationAgentProcessSecurity för att ange autentiseringsuppgifterna för Det Microsoft Windows-konto som distributionsagenten körs under hos distributören. Det här kontot används för att upprätta lokala anslutningar till distributören och för att upprätta fjärranslutningar med hjälp av Windows-autentisering.
Anmärkning
Inställningen SynchronizationAgentProcessSecurity krävs inte när prenumerationen skapas av en medlem i den fasta sysadmin-serverrollen , men vi rekommenderar det. I det här fallet personifierar agenten SQL Server Agent-kontot. Mer information finns i Säkerhetsmodell för replikeringsagent.
(Valfritt) Med värdet true (standardvärdet) för CreateSyncAgentByDefault skapas ett agentjobb som används för att synkronisera prenumerationen. Om du anger false kan prenumerationen endast synkroniseras programmatiskt.
(Valfritt) Ställ in WindowsAuthentication till False, samt SqlStandardLogin, SqlStandardPassword eller SecureSqlStandardPassword-fälten i SubscriberSecurity när du använder SQL Server-autentisering för att ansluta till abonnenten.
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
Skapa en anslutning till Publisher med hjälp ServerConnection av klassen .
Skapa en instans av MergePublication klassen med hjälp av Publisher-anslutningen från steg 1. Ange Name, DatabaseNameoch ConnectionContext.
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.
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.
Om prenumerationsdatabasen inte finns skapar du den med hjälp Database av klassen . Mer information finns i Skapa, ändra och ta bort databaser.
Skapa en instans av MergeSubscription klassen.
Ange följande prenumerationsegenskaper:
ServerConnection till utgivaren som skapades i steg 1 för ConnectionContext.
Namnet på prenumerationsdatabasen för SubscriptionDBName.
Namnet på prenumeranten för SubscriberName.
Namnet på publikationsdatabasen för DatabaseName.
Namnet på publikationen för PublicationName.
Fälten LoginPassword och SynchronizationAgentProcessSecurity för att ange autentiseringsuppgifterna för Microsoft Windows-kontot under vilket Merge Agent körs hos distributören. Det här kontot används för att upprätta lokala anslutningar till distributören och för att upprätta fjärranslutningar via Windows-autentisering.
Anmärkning
Inställningen SynchronizationAgentProcessSecurity krävs inte när prenumerationen skapas av en medlem i den fasta sysadmin-serverrollen , men vi rekommenderar det. I det här fallet personifierar agenten SQL Server Agent-kontot. Mer information finns i Säkerhetsmodell för replikeringsagent.
(Valfritt) Värdet true (standardvärde) för CreateSyncAgentByDefault används för att skapa ett agentjobb som synkroniserar prenumerationen. Om du anger false kan prenumerationen endast synkroniseras programmatiskt.
(Valfritt) Ange fälten SqlStandardLoginSqlStandardPassword och SecureSqlStandardPassword för SubscriberSecurity när du använder SQL Server-autentisering för att ansluta till prenumeranten.
(Valfritt) Ställ in WindowsAuthentication till False samt fälten SqlStandardLogin, SqlStandardPassword och SecureSqlStandardPassword eller PublisherSecurity när du använder SQL Server-autentisering för att ansluta till utgivaren.
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