/// <summary>
        ///		Download data for the subscription from the server, and don't return until the download
        ///		finishes.
        /// </summary>
        /// <param name="subscription">
        ///		The subscription for which you want to download data from the server.
        /// </param>
        public void Synchronize(Subscription subscription)
        {
            Guard.ArgumentNotNull(subscription, "subscription");

            if (!Subscriptions.Contains(subscription))
            {
                throw new ArgumentException(Properties.Resources.NoSuchSubscription);
            }

            SubscriptionCredentials credentials = subscriptionCredentials.FindCredentials(subscription);
            SqlCeReplication        replication = GetSyncReplication(subscription);

            if (credentials != null)
            {
                credentials.ApplyCredentials(replication);
            }

            try
            {
                replication.Synchronize();
            }
            finally
            {
                replication.Dispose();

                ReloadSubscriptions();
            }
        }
        /// <summary>
        ///		Begin downloading data for the subscription and return control immediately.
        /// </summary>
        /// <remarks>
        /// <para>
        ///		Before you call this method, you can register to receive events from the <paramref name="subscription"/>
        ///		object. This will allow you to monitor the progress of the synchronization.
        /// </para>
        /// <para>
        ///		Once the synchronization completes, you must call <see cref="EndSync"/>.
        /// </para>
        /// </remarks>
        /// <param name="subscription">
        ///		The subscription you want to synchronize.
        /// </param>
        public void BeginSynchronize(Subscription subscription)
        {
            Guard.ArgumentNotNull(subscription, "subscription");

            if (!Subscriptions.Contains(subscription))
            {
                throw new ArgumentException(Properties.Resources.NoSuchSubscription);
            }

            SubscriptionCredentials credentials = subscriptionCredentials.FindCredentials(subscription);
            SqlCeReplication        replication = GetSyncReplication(subscription);

            if (credentials != null)
            {
                credentials.ApplyCredentials(replication);
            }
            subscription.BeginSync(replication);
        }