Web 同期を許可するようにパブリケーションを構成する方法 (RMO プログラミング)
ここでは、マージ レプリケーション用に Web 同期を構成する最初の手順を示します。構成プロセスの概要については、「マージ レプリケーションの Web 同期を構成する方法 (RMO プログラミング)」を参照してください。ここでの手順が完了したら、2 番目の手順に進み、IIS サーバーを構成します。2 番目の手順については「Web 同期用に IIS を構成する方法」で説明します。
ここでは、Web 同期に必要なパラメータについて説明します。パブリケーション作成の詳細については、「パブリケーションを作成する方法 (RMO プログラミング)」を参照してください。
Web 同期を許可するようにマージ パブリケーションを構成するには
ServerConnection クラスを使用して、パブリッシャへの接続を作成します。
パブリケーション データベースに ReplicationDatabase クラスのインスタンスを作成します。
手順 1. の ServerConnection インスタンスを ConnectionContext プロパティに設定します。
LoadProperties メソッドを呼び出します。このメソッドが false を返す場合、データベースが存在するかどうかを確認してください。
EnabledMergePublishing プロパティが false の場合、このプロパティを true に設定し、CommitPropertyChanges を呼び出します。
MergePublication クラスのインスタンスを作成し、このオブジェクトに次のプロパティを設定します。
手順 1. の ServerConnection を ConnectionContext に指定します。
パブリッシュするデータベースの名前を DatabaseName に指定します。
Name にパブリケーションの名前を指定します。
包括的論理和演算子 (Visual C# では |、Visual Basic では Or) を使用して、Attributes に AllowWebSynchronization および AllowPull を追加し、Web 同期を有効にします。
(省略可) HTTP を通じてのみサブスクライバがパブリッシャに接続する場合は、包括的論理和演算子 (Visual C# では |、Visual Basic では Or) を使用して、Attributes に値 AllowAnonymous を追加します。
新規パブリケーションの場合は、SnapshotGenerationAgentProcessSecurity の Login フィールドおよび Password フィールドを設定して、スナップショット エージェントの実行に使用される Windows アカウントの資格情報を指定します。このアカウントは、Windows 認証を使用している場合に、スナップショット エージェントがローカル ディストリビュータへの接続や任意のリモート接続を行うときにも使用されます。
注 パブリケーションが sysadmin 固定サーバー ロールのメンバで作成されている場合は、SnapshotGenerationAgentProcessSecurity を設定する必要はありません。詳細については、「レプリケーション エージェントのセキュリティ モデル」を参照してください。
次のいずれかのメソッドを呼び出します。
新規パブリケーションの場合は、Create を呼び出して、Web 同期を有効にしたパブリケーションを作成します。
既存のパブリケーションの場合は、CommitPropertyChanges を呼び出して、Web 同期を有効にします。
使用例
次の例では、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