Le librerie del Client Object Model (CSOM) per SharePoint Online sono ormai uno strumento importantissimo sia per lo sviluppo di applicazioni/add-in SharePoint Online, sia per le attività di manutenzione dei nostri team site.
Oggi vedremo come sfruttare le classi di un particolare namespace di queste librerie, il namespace Microsoft.Online.SharePoint.TenantAdministration, per la creazione di una nuova site collection all'interno del vostro tenant.

Per prima cosa dobbiamo scaricare da Nuget le lirberie che ci servono.


Oltre alle librerie base del CSOM per SharePoint Online, dobbiamo scaricare la libreria Microsoft.Online.SharePoint.Client.Tenant.dll che contiene le classi che ci servono per la creazione di una nuova site collection.
Fatto questo, possiamo sfruttare il seguente codice d'esempio:

var username = "your username";
var password = "your password";
var passwordSecure = new SecureString();
foreach (char c in password.ToCharArray()) passwordSecure.AppendChar(c);

var context = new ClientContext("http://yourtenant-admin.sharepoint.com");
context.Credentials = new SharePointOnlineCredentials(username, passwordSecure);
using (context)
{
	var tenant = new Tenant(context);
	var properties = new SiteCreationProperties();
	properties.Url = "http://yourtenant.sharepoint.com/sites/newSiteUrl";
	properties.Title = "New site collection";
	properties.Owner = "yourmail@yourdomain.com;
	properties.Template = "STS#0";
	properties.StorageMaximumLevel = 100;
	properties.UserCodeMaximumLevel = 100;
	properties.Lcid = (uint)1033;

	var operation = tenant.CreateSite(properties)
	context.Load(operation, o => o.IsComplete);
	context.ExecuteQuery();

	while (!operation.IsComplete)
	{
		Thread.Sleep(2000);
		operation.RefreshLoad();
		context.ExecuteQuery();
	}
}

Come potete vedere, la prima cosa da fare è quella di connettersi al vostro tenant SharePoint Online creando una nuova istanza della classe ClientContext. E' molto importante notare che ci connettiamo al tenant tramite l'indirizzo -admin che è appunto la pagina in cui potete gestire le vostre site collection e tutte le altre configurazioni di SharePoint Online.
Una volta recuperato il contesto, si utilizza la classe SiteCreationProperties per specificare tutte le proprietà della nuova site collection, dal nome al template che dovrà utilizzare il sito di root.
Infine, si lancia l'esecuzione dell'azione al server SharePoint Online, facendo attenzione alla gestione di quella che il sistema chiama una "long operation".
E' possibile infatti che la creazione di una nuova site collection possa portar via un sacco di tempo. A me è capitato di aspettare anche 20/25 minuti. Per ovviare a questo problema, le librerie del CSOM offrono la classe SpoOperation che tramite la proprietà IsComplete e il metodo RefreshLoad ci permette il controllo dello stato della nostra richiesta di creazione. 
Spero vi possa essere utile.