다음을 통해 공유


방법: 웹 동기화를 허용하도록 게시 구성(RMO 프로그래밍)

이 항목의 절차는 병합 복제를 위해 웹 동기화를 구성하는 첫 번째 단계입니다. 구성 프로세스에 대한 개요는 방법: 병합 복제에 대한 웹 동기화 구성(RMO 프로그래밍)을 참조하십시오. 이 항목의 절차를 완료한 다음에는 두 번째 단계를 진행하여 IIS 서버를 구성하십시오. 두 번째 단계는 방법: 웹 동기화를 위한 IIS 구성에 설명되어 있습니다.

이 항목에서는 웹 동기화에 필요한 매개 변수에 대해 설명합니다. 게시를 만드는 방법에 대한 자세한 내용은 방법: 게시 만들기(RMO 프로그래밍)를 참조하십시오.

웹 동기화를 허용하도록 병합 게시를 구성하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. 게시 데이터베이스에 대한 ReplicationDatabase 클래스의 인스턴스를 만듭니다.

  3. ConnectionContext 속성을 1단계에서 만든 ServerConnection 인스턴스로 설정합니다.

  4. LoadProperties 메서드를 호출합니다. 이 메서드가 false를 반환할 경우 데이터베이스가 있는지 확인합니다.

  5. EnabledMergePublishing 속성이 false이면 이 속성을 true로 설정한 후 CommitPropertyChanges를 호출합니다.

  6. MergePublication 클래스의 인스턴스를 만든 다음 이 개체에 대해 다음 속성을 설정합니다.

    • ConnectionContext에 대해 1단계에서 만든 ServerConnection

    • DatabaseName에 대한 게시 데이터베이스의 이름

    • Name에 대한 게시의 이름

    • 포함 논리 OR 연산자(Visual C#에서는 |, Visual Basic에서는 Or)를 사용하여 AllowWebSynchronizationAllowPull 값을 Attributes에 추가하여 웹 동기화를 설정합니다.

    • (옵션) 구독자가 HTTP를 통해서만 게시자에 연결하는 경우에는 포함 논리 OR 연산자(Visual C#에서는 |, Visual Basic에서는 Or)를 사용하여 AllowAnonymous 값을 Attributes에 추가합니다.

    • 새 게시의 경우에는 스냅숏 에이전트가 실행되는 Windows 계정에 대한 자격 증명을 제공하려면 SnapshotGenerationAgentProcessSecurityLoginPassword 필드를 설정합니다. 이 계정은 스냅숏 에이전트에서 로컬 배포자에 연결할 때에도 사용되며, Windows 인증이 사용되는 경우에는 모든 원격 연결에 사용됩니다.

      [!참고]

      게시가 sysadmin 고정 서버 역할의 멤버에 의해 생성되는 경우에는 SnapshotGenerationAgentProcessSecurity를 설정할 필요가 없습니다. 자세한 내용은 복제 에이전트 보안 모델을 참조하십시오.

  7. 다음 메서드 중 하나를 호출합니다.

    • 새 게시의 경우 웹 동기화가 설정된 게시를 만들려면 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