我创建了事务发布并尝试为此发布创建订阅。在 MS Studio 中创建订阅工作正常,但是当我使用 RMO 时,我的订阅库中的表永远不会出现。
我的“首次同步初始化”有什么问题?
如何设置“立即初始化”?
我的代码:
public static void CreateSub(string publicationName, string publisherName, string subscriberName, string subscriptionDbName, string publicationDbName)
{
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);
TransPublication publication;
TransPullSubscription subscription;
try
{
subscriberConn.Connect();
publisherConn.Connect();
publication = new TransPublication();
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
publication.ConnectionContext = publisherConn;
if (publication.IsExistingObject)
{
if ((publication.Attributes & PublicationAttributes.AllowPull) == 0)
{
publication.Attributes |= PublicationAttributes.AllowPull;
}
publication.Attributes |= PublicationAttributes.ImmediateSync;
subscription = new TransPullSubscription();
subscription.ConnectionContext = subscriberConn;
subscription.PublisherName = publisherName;
subscription.PublicationName = publicationName;
subscription.PublicationDBName = publicationDbName;
subscription.DatabaseName = subscriptionDbName;
subscription.SynchronizationAgentProcessSecurity.Login = @"*****";
subscription.SynchronizationAgentProcessSecurity.Password = "****";
subscription.CreateSyncAgentByDefault = true;
subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Continuously;
subscription.Create();
Boolean registered = false;
foreach (TransSubscription existing in publication.EnumSubscriptions())
{
if (existing.SubscriberName == subscriberName&& existing.SubscriptionDBName == subscriptionDbName)
{
registered = true;
}
}
if (!registered)
{
publication.MakePullSubscriptionWellKnown(
subscriberName, subscriptionDbName,
SubscriptionSyncType.Automatic,
TransSubscriberType.ReadOnly);
}
if (subscription.LoadProperties())
{
if (subscription.PublisherSecurity != null)
{
subscription.SynchronizationAgent.Synchronize();// class is not registered error
}
else
{
throw new ApplicationException("There is insufficent metadata to " +
"synchronize the subscription. Recreate the subscription with " +
"the agent job or supply the required agent properties at run time.");
}
}
}
else
{
throw new ApplicationException(String.Format(
"The publication '{0}' does not exist on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
throw new ApplicationException(string.Format(
"the subscription to {0} could not be created.", publisherName), ex);
}
finally
{
subscriberConn.Disconnect();
publisherConn.Disconnect();
}
}