sql server replication:
Sounds like something is wrong with your code. Here is some code which works
for me. Its vb, but not my choice, my client wanted it in vb. Let me know if
you want a csharp version.
Imports Microsoft.SqlServer.Replication
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Imports Microsoft.SqlServer.Server
Public Class Form1
'changes the below lines for your topology
'--------------------------------------------
Dim publicationName As String = "PublicationName"
Dim publisherName As String = "SERVER"
Dim publisherLogin As String = "Non_sa_account_in_the_pal"
Dim publisherPassword As String = "Password"
Dim publicationDbName As String = "PublicationDB"
Dim distributorLogin As String = "DBO_account_in_the_distributionDatabase"
Dim distributorPassword As String = "Password"
Dim distributorAddress As String = "10.10.10.10"
Dim internetTimeout As Integer = 3000
Dim subscriberLogin As String = "Non_sa_account_on_the_Subscriber"
Dim subscriberPassword As String = "Password"
Dim subscriberName As String = "SubscriberMachineName"
Dim subscriptionDbName As String = "AdventureWorksReplica"
Dim hostname As String = "SubscriberMachineName"
Dim subscriberSynchronizationAccount =
"WindowsNTAccountOnTheSubscriberShouldBeInTheLocalAdministratorsGroup"
Dim subscriberSynchronizationPassword = "Password"
Dim internetLogin As String = "BasicAuthenticationAccountOnWebServer"
Dim internetPassword As String = "password"
Dim OutputVerboseLevel As Integer = 3
Dim outputFile As String = "C:\replication.out"
Dim webSyncUrl As String =
"
https://server.MyDomain.com/MyVirtualDirectory/replisapi.dll" '--------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' The publication must support anonymous Subscribers, pull
' subscriptions, and Web synchronization.
' Define the Publisher, publication, and databases.
'Create the Subscriber connection.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
' Create the objects that we need.
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
'conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify an anonymous Subscriber type since we can't
' register at the Publisher with a direct connection.
subscription.SubscriberType = MergeSubscriberType.Anonymous
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login =
subscriberSynchronizationAccount
subscription.SynchronizationAgentProcessSecurity.Password =
subscriberSynchronizationPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = internetLogin
subscription.InternetPassword = internetPassword
' Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
If subscription.IsExistingObject() = True Then
Synchronize.Visible = True
CreateSubscription.Visible = False
Else
Synchronize.Visible = False
CreateSubscription.Visible = True
End If
Catch ex As Exception
' Implement the appropriate error handling here.
MessageBox.Show(ex.InnerException.ToString())
Finally
conn.Disconnect()
End Try
End Sub
Private Sub CreateSubscription_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles CreateSubscription.Click
' The publication must support anonymous Subscribers, pull
' subscriptions, and Web synchronization.
' Define the Publisher, publication, and databases.
'Create the Subscriber connection.
Dim conn As ServerConnection = New ServerConnection(subscriberName)
' Create the objects that we need.
Dim subscription As MergePullSubscription
Try
' Connect to the Subscriber.
'conn.Connect()
' Define the pull subscription.
subscription = New MergePullSubscription()
subscription.ConnectionContext = conn
subscription.PublisherName = publisherName
subscription.PublicationName = publicationName
subscription.PublicationDBName = publicationDbName
subscription.DatabaseName = subscriptionDbName
subscription.HostName = hostname
' Specify an anonymous Subscriber type since we can't
' register at the Publisher with a direct connection.
subscription.SubscriberType = MergeSubscriberType.Anonymous
' Specify the Windows login credentials for the Merge Agent job.
subscription.SynchronizationAgentProcessSecurity.Login =
subscriberSynchronizationAccount
subscription.SynchronizationAgentProcessSecurity.Password =
subscriberSynchronizationPassword
' Enable Web synchronization.
subscription.UseWebSynchronization = True
subscription.InternetUrl = webSyncUrl
' Specify the same Windows credentials to use when connecting to the
' Web server using HTTPS Basic Authentication.
subscription.InternetSecurityMode = AuthenticationMethod.BasicAuthentication
subscription.InternetLogin = internetLogin
subscription.InternetPassword = internetPassword
' Ensure that we create a job for this subscription.
subscription.CreateSyncAgentByDefault = True
' Create the pull subscription at the Subscriber.
subscription.Create()
Synchronize.Visible = True
Catch ex As Exception
' Implement the appropriate error handling here.
MessageBox.Show(ex.InnerException.ToString())
Finally
conn.Disconnect()
End Try
End Sub
Private Sub Synchronize_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Synchronize.Click
Dim mergeAgent As New MergeSynchronizationAgent
Synchronize.Visible = False
'AddHandler mergeAgent.Status, New MergeSynchronizationAgent(AddressOf
objSnapshot_status)
AddHandler mergeAgent.Status, New
Microsoft.SqlServer.Replication.AgentCore.StatusEventHandler(AddressOf
MergeStatus)
'/'/StatusEventHandler()
'AddHandler mergeAgent.Status, New StatusEventHandler(AddressOf
Merge_StatusEventHandler, AddressOf Percent)
mergeAgent.Publication = publicationName
mergeAgent.Publisher = publisherName
mergeAgent.PublisherDatabase = publicationDbName