Procedura: Configurazione di una pubblicazione per consentire la sincronizzazione tramite il Web (programmazione RMO)
La procedura descritta in questo argomento rappresenta il primo passaggio nella configurazione della sincronizzazione tramite il Web per la replica di tipo merge. Per una panoramica del processo di configurazione, vedere Procedura: Configurazione della sincronizzazione tramite il Web per la replica di tipo merge (programmazione RMO). Al termine delle procedura descritte in questo argomento, procedere con il secondo passaggio, ovvero la configurazione del server IIS. Il secondo passaggio è descritto in Procedura: Configurazione di IIS per la sincronizzazione tramite il Web.
In questo argomento sono descritti i parametri richiesti per la sincronizzazione tramite il Web. Per ulteriori informazioni sulla procedura di creazione delle pubblicazioni, vedere Procedura: Creazione di una pubblicazione (programmazione RMO).
Per configurare una pubblicazione di tipo merge per consentire la sincronizzazione tramite il Web
Creare una connessione al server di pubblicazione tramite la classe ServerConnection.
Creare un'istanza della classe ReplicationDatabase per il database di pubblicazione.
Impostare la proprietà ConnectionContext sull'istanza di ServerConnection restituita al passaggio 1.
Chiamare il metodo LoadProperties. Se il metodo restituisce false, verificare che il database esista.
Se la proprietà EnabledMergePublishing è false, impostarla su true, quindi chiamare CommitPropertyChanges.
Creare un'istanza della classe MergePublication, quindi impostare le proprietà seguenti per questo oggetto:
Oggetto ServerConnection del passaggio 1 per ConnectionContext.
Nome del database pubblicato per DatabaseName.
Nome per la pubblicazione per Name.
Aggiungere i valori AllowWebSynchronization e AllowPull a Attributes utilizzando l'operatore logico OR inclusivo (| in Visual C# e Or in Visual Basic) per attivare la sincronizzazione tramite il Web.
(Facoltativo) Se i Sottoscrittori si connetteranno solo al server di pubblicazione tramite HTTP, aggiungere il valore AllowAnonymous a Attributes utilizzando l'operatore logico OR inclusivo (| in Visual C# e Or in Visual Basic).
Per una nuova pubblicazione impostare i campi Login e Password di SnapshotGenerationAgentProcessSecurity per fornire le credenziali per l'account di Windows con il quale verrà eseguito l'agente snapshot. Questo account viene utilizzato anche quando l'agente snapshot stabilisce connessioni al server di distribuzione locale e per qualsiasi connessione remota quando si utilizza l'autenticazione di Windows.
Nota
Quando la pubblicazione viene creata da un membro del ruolo predefinito del server sysadmin, non è necessario impostare SnapshotGenerationAgentProcessSecurity. Per ulteriori informazioni, vedere Modello di sicurezza dell'agente di replica.
Chiamare uno dei metodi seguenti:
Per una nuova pubblicazione, per creare la pubblicazione con la sincronizzazione tramite il Web attivata, chiamare Create.
Per una pubblicazione esistente, per attivare la sincronizzazione tramite il Web, chiamare CommitPropertyChanges.
Esempio
Nell'esempio seguente viene creata una pubblicazione attivata per la sincronizzazione tramite il 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