방법: 웹 동기화를 허용하도록 게시 구성(RMO 프로그래밍)
이 항목의 절차는 병합 복제를 위해 웹 동기화를 구성하는 첫 번째 단계입니다. 구성 프로세스에 대한 개요는 방법: 병합 복제에 대한 웹 동기화 구성(RMO 프로그래밍)을 참조하십시오. 이 항목의 절차를 완료한 다음에는 두 번째 단계를 진행하여 IIS 서버를 구성하십시오. 두 번째 단계는 방법: 웹 동기화를 위한 IIS 구성에 설명되어 있습니다.
이 항목에서는 웹 동기화에 필요한 매개 변수에 대해 설명합니다. 게시를 만드는 방법에 대한 자세한 내용은 방법: 게시 만들기(RMO 프로그래밍)를 참조하십시오.
웹 동기화를 허용하도록 병합 게시를 구성하려면
ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.
게시 데이터베이스에 대한 ReplicationDatabase 클래스의 인스턴스를 만듭니다.
ConnectionContext 속성을 1단계에서 만든 ServerConnection 인스턴스로 설정합니다.
LoadProperties 메서드를 호출합니다. 이 메서드가 false를 반환할 경우 데이터베이스가 있는지 확인합니다.
EnabledMergePublishing 속성이 false이면 이 속성을 true로 설정한 후 CommitPropertyChanges를 호출합니다.
MergePublication 클래스의 인스턴스를 만든 다음 이 개체에 대해 다음 속성을 설정합니다.
ConnectionContext에 대해 1단계에서 만든 ServerConnection
DatabaseName에 대한 게시 데이터베이스의 이름
Name에 대한 게시의 이름
포함 논리 OR 연산자(Visual C#에서는 |, Visual Basic에서는 Or)를 사용하여 AllowWebSynchronization 및 AllowPull 값을 Attributes에 추가하여 웹 동기화를 설정합니다.
(옵션) 구독자가 HTTP를 통해서만 게시자에 연결하는 경우에는 포함 논리 OR 연산자(Visual C#에서는 |, Visual Basic에서는 Or)를 사용하여 AllowAnonymous 값을 Attributes에 추가합니다.
새 게시의 경우에는 스냅숏 에이전트가 실행되는 Windows 계정에 대한 자격 증명을 제공하려면 SnapshotGenerationAgentProcessSecurity의 Login 및 Password 필드를 설정합니다. 이 계정은 스냅숏 에이전트에서 로컬 배포자에 연결할 때에도 사용되며, Windows 인증이 사용되는 경우에는 모든 원격 연결에 사용됩니다.
[!참고]
게시가 sysadmin 고정 서버 역할의 멤버에 의해 생성되는 경우에는 SnapshotGenerationAgentProcessSecurity를 설정할 필요가 없습니다. 자세한 내용은 복제 에이전트 보안 모델을 참조하십시오.
다음 메서드 중 하나를 호출합니다.
새 게시의 경우 웹 동기화가 설정된 게시를 만들려면 Create를 호출합니다.
기존 게시의 경우 웹 동기화를 설정하려면 CommitPropertyChanges를 호출합니다.
예
다음 예에서는 웹 동기화가 설정된 게시를 만듭니다.
// 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