Export (0) Print
Expand All

TransPublication.MakePullSubscriptionWellKnown Method

Registers a pull subscription at the Publisher.

Namespace: Microsoft.SqlServer.Replication
Assembly: Microsoft.SqlServer.Rmo (in microsoft.sqlserver.rmo.dll)

public void MakePullSubscriptionWellKnown (
	string subscriber,
	string subscriptionDB,
	SubscriptionSyncType syncType,
	TransSubscriberType subscriberType
)
public void MakePullSubscriptionWellKnown (
	String subscriber, 
	String subscriptionDB, 
	SubscriptionSyncType syncType, 
	TransSubscriberType subscriberType
)
public function MakePullSubscriptionWellKnown (
	subscriber : String, 
	subscriptionDB : String, 
	syncType : SubscriptionSyncType, 
	subscriberType : TransSubscriberType
)

Parameters

subscriber

A String value that specifies the name of the Subscriber where the pull subscription was created.

subscriptionDB

A String value that specifies the name of the subscription database.

syncType

A SubscriptionSyncType object value that specifies how the subscription synchronization is performed.

subscriberType

A TransSubscriberType object value that specifies the subscription behavior when a Subscriber initiates a change to data in an article image.

You must call MakePullSubscriptionWellKnown at the Publisher when creating a pull subscription.

Use EnumSubscriptions to determine if a subscription is already registered at the Publisher. If the registration exists, MakePullSubscriptionWellKnown generates an error at the server.

The MakePullSubscriptionWellKnown method can only be called by members of the sysadmin fixed server role at the Publisher, by members of the db_owner fixed database role on the publication database, or by users in the publication access list (PAL).

Calling MakePullSubscriptionWellKnown is equivalent to executing sp_addsubscription for a pull subscription.

This namespace, class, or member is supported only in version 2.0 of the .NET Framework.


// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksProductTran";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorksReplica";
string publicationDbName = "AdventureWorks";

//Create connections to the Publisher and Subscriber.
ServerConnection subscriberConn = new ServerConnection(subscriberName);
ServerConnection publisherConn = new ServerConnection(publisherName);

// Create the objects that we need.
TransPublication publication;
TransPullSubscription subscription;

try
{
    // Connect to the Publisher and Subscriber.
    subscriberConn.Connect();
    publisherConn.Connect();

    // Ensure that the publication exists and that 
    // it supports pull subscriptions.
    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;
        }

        // Define the pull subscription.
        subscription = new TransPullSubscription();
        subscription.ConnectionContext = subscriberConn;
        subscription.PublisherName = publisherName;
        subscription.PublicationName = publicationName;
        subscription.PublicationDBName = publicationDbName;
        subscription.DatabaseName = subscriptionDbName;

        // Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

        // Make sure that the agent job for the subscription is created.
        subscription.CreateSyncAgentByDefault = true;

        // By default, subscriptions to transactional publications are synchronized 
        // continuously, but in this case we only want to synchronize on demand.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

        // Create the pull subscription at the Subscriber.
        subscription.Create();

        Boolean registered = false;

        // Verify that the subscription is not already registered.
        foreach (TransSubscription existing
            in publication.EnumSubscriptions())
        {
            if (existing.SubscriberName == subscriberName
                && existing.SubscriptionDBName == subscriptionDbName)
            {
                registered = true;
            }
        }
        if (!registered)
        {
            // Register the subscription with the Publisher.
            publication.MakePullSubscriptionWellKnown(
                subscriberName, subscriptionDbName,
                SubscriptionSyncType.Automatic,
                TransSubscriberType.ReadOnly);
        }
    }
    else
    {
        // Do something here if the publication does not exist.
        throw new ApplicationException(String.Format(
            "The publication '{0}' does not exist on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement the appropriate error handling here.
    throw new ApplicationException(String.Format(
        "The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
    subscriberConn.Disconnect();
    publisherConn.Disconnect();
}

Any public static (Shared in Microsoft Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Development Platforms

For a list of the supported platforms, see Hardware and Software Requirements for Installing SQL Server 2005.

Target Platforms

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft