Como configurar uma publicação para permitir a sincronização da Web (Programação RMO)

O procedimento nesse tópico é a primeira etapa da configuração da sincronização da Web para replicação de mesclagem. Para uma visão geral do processo de configuração, consulte Como configurar a sincronização da Web para replicação de mesclagem (Programação RMO). Após você concluir os procedimentos neste tópico vá para a segunda etapa, configurando o servidor IIS. Essa segunda etapa está descrita em Como configurar o IIS para sincronização da Web.

Esse tópico descreve os parâmetros necessários à sincronização da Web. Para obter mais informações sobre como criar publicações, consulte Como criar uma publicação (programação RMO).

Para configurar uma publicação de mesclagem para permitir a sincronização da Web

  1. Crie uma conexão com o Publicador usando a classe ServerConnection.

  2. Crie uma instância da classe ReplicationDatabase para o banco de dados de publicação.

  3. Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.

  4. Chame o método LoadProperties . Se esse método retornar false, verifique se o banco de dados existe.

  5. Se a propriedade EnabledMergePublishing for false, defina essa propriedade para true e, em seguida, chame CommitPropertyChanges.

  6. Crie uma instância da classe MergePublication e defina as propriedades a seguir para esse objeto:

  7. Chame um dos métodos seguintes:

    • Para uma nova publicação, para criar a publicação com o sincronização da Web habilitada, chame Create.

    • Para uma publicação existente, para habilitar a sincronização da Web, chame CommitPropertyChanges.

Exemplo

O exemplo a seguir cria uma publicação habilitada para sincronização da Web.

            // Set the Publisher, publication database, and publication names.
            string publisherName = publisherInstance;
            string publicationName = "AdvWorksSalesOrdersMerge";
            string publicationDbName = "AdventureWorks";

            ReplicationDatabase publicationDb;
            MergePublication publication;

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

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

                // Enable the database for merge publication.               
                publicationDb = new ReplicationDatabase(publicationDbName, conn);
                if (publicationDb.LoadProperties())
                {
                    if (!publicationDb.EnabledMergePublishing)
                    {
                        publicationDb.EnabledMergePublishing = true;
                    }
                }
                else
                {
                    // Do something here if the database does not exist. 
                    throw new ApplicationException(String.Format(
                        "The {0} database does not exist on {1}.",
                        publicationDb, publisherName));
                }

                // Set the required properties for the merge publication.
                publication = new MergePublication();
                publication.ConnectionContext = conn;
                publication.Name = publicationName;
                publication.DatabaseName = publicationDbName;

                // Enable Web synchronization, if not already enabled.
                if ((publication.Attributes & PublicationAttributes.AllowWebSynchronization) == 0)
                {
                    publication.Attributes |= PublicationAttributes.AllowWebSynchronization;
                }

                // Enable pull subscriptions, if not already enabled.
                if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
                {
                    publication.Attributes |= PublicationAttributes.AllowPull;
                }
                
                // Enable Subscriber requested snapshot generation. 
                publication.Attributes |= PublicationAttributes.AllowSubscriberInitiatedSnapshot;

                // Enable anonymous access for Subscribers that cannot make a direct connetion 
                // to the Publisher. 
                publication.Attributes |= PublicationAttributes.AllowAnonymous;

                // Specify the Windows account under which the Snapshot Agent job runs.
                // This account will be used for the local connection to the 
                // Distributor and all agent connections that use Windows Authentication.
                publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
                publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

                // Explicitly set the security mode for the Publisher connection
                // Windows Authentication (the default).
                publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

                if (!publication.IsExistingObject)
                {
                    // Create the merge publication and the Snapshot Agent job.
                    publication.Create();
                    publication.CreateSnapshotAgent();
                }
                else
                {
                    throw new ApplicationException(String.Format(
                        "The {0} publication already exists.", publicationName));
                }
            }

            catch (Exception ex)
            {
                // Implement custom application error handling here.
                throw new ApplicationException(String.Format(
                    "The publication {0} could not be created.", publicationName), ex);
            }
            finally
            {
                conn.Disconnect();
            }
' Set the Publisher, publication database, and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks"

Dim publicationDb As ReplicationDatabase
Dim publication As MergePublication

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

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

    ' Enable the database for merge publication.                
    publicationDb = New ReplicationDatabase(publicationDbName, conn)
    If publicationDb.LoadProperties() Then
        If Not publicationDb.EnabledMergePublishing Then
            publicationDb.EnabledMergePublishing = True
        End If
    Else
        ' Do something here if the database does not exist. 
        Throw New ApplicationException(String.Format( _
         "The {0} database does not exist on {1}.", _
         publicationDb, publisherName))
    End If

    ' Set the required properties for the merge publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Enable Web synchronization, if not already enabled.
    If (publication.Attributes And PublicationAttributes.AllowWebSynchronization) = 0 Then
        publication.Attributes = publication.Attributes _
        Or PublicationAttributes.AllowWebSynchronization
    End If

    ' Enable pull subscriptions, if not already enabled.
    If (publication.Attributes And PublicationAttributes.AllowPull) = 0 Then
        publication.Attributes = publication.Attributes _
        Or PublicationAttributes.AllowPull
    End If

    ' Enable Subscriber requested snapshot generation. 
    publication.Attributes = publication.Attributes _
        Or PublicationAttributes.AllowSubscriberInitiatedSnapshot

    ' Enable anonymous access for Subscribers that cannot 
    ' make a direct connetion to the Publisher. 
    publication.Attributes = publication.Attributes _
        Or PublicationAttributes.AllowAnonymous

    ' Specify the Windows account under which the Snapshot Agent job runs.
    ' This account will be used for the local connection to the 
    ' Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword

    ' Explicitly set the security mode for the Publisher connection
    ' Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True

    If Not publication.IsExistingObject Then
        ' Create the merge publication and the Snapshot Agent job.
        publication.Create()
        publication.CreateSnapshotAgent()
    Else
        Throw New ApplicationException(String.Format( _
            "The {0} publication already exists.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
        "The publication {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try