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
Crie uma conexão com o Publicador usando a classe ServerConnection.
Crie uma instância da classe ReplicationDatabase para o banco de dados de publicação.
Defina a propriedade ConnectionContext para a instância de ServerConnection na etapa 1.
Chame o método LoadProperties . Se esse método retornar false, verifique se o banco de dados existe.
Se a propriedade EnabledMergePublishing for false, defina essa propriedade para true e, em seguida, chame CommitPropertyChanges.
Crie uma instância da classe MergePublication e defina as propriedades a seguir para esse objeto:
O ServerConnection da Etapa 1 para ConnectionContext.
Nome do banco de dados publicado para DatabaseName.
Nome da publicação para Name.
Adicione os valores AllowWebSynchronization e AllowPull para Attributes, usando o operador OR de lógica inclusa (| no Visual C# e Or no Visual Basic) para habilitar a sincronização da Web.
(Opcional) Se os Assinantes se conectarem ao Publicador apenas por HTTP, adicione o valor AllowAnonymous para Attributes, usando a lógica do operador OR inclusiva (| no Visual C# e Or no Visual Basic).
Para uma nova Publicação, para fornecer as credenciais à uma conta do Windows sob a qual o Snapshot Agent executa, defina os campos Login e Password do SnapshotGenerationAgentProcessSecurity. Essa conta é também usada quando o Snapshot Agent faz conexões com o Distribuidor local e para conexões remotas quando se usa a Autenticação do Windows.
Observação Quando a publicação é criada por um membro da função de servidor fixa sysadmin não é necessário definir SnapshotGenerationAgentProcessSecurity. Para obter mais informações, consulte Modelo de segurança do agente de replicação.
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 = "AdventureWorks2008R2";
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 = "AdventureWorks2008R2"
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