How to: Deploy Content Between Servers

This code example shows how to use the object model to create paths and jobs that deploy content between site collections. This code assumes that the source and destination site collections are in the same server farm. However, paths can be configured between different server farms. The tasks this code performs can also be done through the user interface in SharePoint Central Administration.

Paths connect source and destination site collections; jobs control what content is copied and when it is copied. Microsoft Office SharePoint Server 2007 supports only source-to-destination deployment and does not support deploying multiple sources to one destination or deploying content from the destination back to the source. Deployment is incremental by default and is configured by a central administrator.

The following example demonstrates how to specify path and job settings, configure content deployment for this farm, and create a deployment path and a job associated with the path you created.

Example

using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.SharePoint.Publishing.Administration;

namespace DeploymentAPISample
{
    // In this sample, we assume the following:
    //   Content is being deployed from a source site collection to 
    //   a destination site collection within the same farm.
    //   The SharePoint Central Admininstration Web application is
    //   accessible through port 8080.
    //   The source site collection is the root site collection on
    //   port 80.
    //   The destination site collection is on a managed path on 
    //   port 81.
    
    class Program
    {
        static void Main( string[] args )
        {
            DeploymentExample example = new DeploymentExample();
            example.Invoke();
        }
    }

    class DeploymentExample
    {
        public void Invoke()
        {

            // Path settings
            string pathName = "My Deployment Path";
            Uri sourceServerUri = new Uri( "https://server" );
            string sourceSiteCollection = "/";
            Uri destinationAdminUri = new Uri( "https://server:8080" );
            Uri destinationServerUri = new Uri( "https://server:81" );
            string destinationSiteCollection = "/sites/deploymentdestination";

            // Job settings
            string jobName = "My Deployment Job";

            ContentDeploymentPath path = null;
            ContentDeploymentJob job = null;

            try
            {
                // Configure Content Deployment for this farm.
                // Note: If you are deploying between farms, 
                // the DESTINATION farm must be configured 
                // to accept incoming deployment jobs.
                ContentDeploymentConfiguration config = ContentDeploymentConfiguration.GetInstance();
                config.AcceptIncomingJobs = true;
                config.RequiresSecureConnection = false; // NOTE: This is the simplest configuration, but is not the recommended secure setting
                config.Update();

                // Create a deployment path.
                ContentDeploymentPathCollection allPaths = ContentDeploymentPath.GetAllPaths();
                path = allPaths.Add();

                path.Name = pathName;
                path.SourceServerUri = sourceServerUri;
                path.SourceSiteCollection = sourceSiteCollection;
                path.DestinationAdminServerUri = destinationAdminUri;
                path.DestinationServerUri = destinationServerUri;
                path.DestinationSiteCollection = destinationSiteCollection;
                path.Update();

                // Create a job associated with the path you created.
                job = ContentDeploymentJob.GetAllJobs().Add();
                job.JobType = ContentDeploymentJobType.ServerToServer;
                job.Name = jobName;
                job.Path = path;
                job.Update();
                job.Run();
            }
            catch ( Exception ex )
            {
                Console.Error.WriteLine( ex.StackTrace );
                throw;
            }
            finally
            {
                // Delete the job that was created.
                if ( job != null )
                {
                    job.Delete();
                }
                // Delete the path that was created.
                if ( path != null )
                {
                    path.Delete();
                }
            }
        }
    }
}

See Also

Tasks

How to: Customize Deployment for Disconnected Scenarios

Concepts

Deploying Content Between Servers