Uno dei difetti più sentiti dagli utenti di MOSS 2007 e che hanno molte sedi geograficamente distribute è la mancanza di un sistema di distribuzione e replica dei contenuti delle sites collections. L'attuale architettura dello storage di MOSS/WSS ha come vincolo la centralizzazione dei database di contenuto nel luogo fisico in cui si trova il corrispondente SQLServer. Questo significa ad esempio avendo il DB dei contenuti a Londra gli utenti che si trovano nella sede di Pechino (o Roma) dovranno comunque prelevare i dati dal server SQL ubicato a Londra. E' vero che la connettività WAN ormai ha raggiunto velocità che 10 anni fà avevamo nelle migliori LAN, ma è sempre un bel andirivieni di bytes che si potrebbe eliminare. Come accennato prima non c'è una funzione che prevede la replicazione e la sincronizzazione di contenuti presenti nei vari site in maniera bidirezionale. Ho detto bidirezionale, perchè in effetti esiste una API che permette la replicazione di dati one-way da un sito sorgente ad un sito destinazione: la cosiddetta
Content Migration API.Introdotta con WSS 3.0 costituisce la base del meccanismo di deployment di contenuti WSS/MOSS da siti di test/staging a siti di produzione ed è anche la base della feature di migrazione dei contenuti da server Microsoft Content Management Server 2002 (MSCMS 2002).
L'uso dell'API può avvenire incapsulato dal poliedrico comando STSADM -o export -o import oppure, per i temerari DevGuri, usando queste pochissime righe di codice:
//queste sono le namespace da referenziare
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using MicroSoft.SharePoint.Deployment;
//questo il codice per esportare un sito intero in un file di trasferimento
SPExportSettings exportSettings = new SPExportSettings();
exportSettings.SiteUrl = "http://webname";
exportSettings.ExportMethod = SPExportMethodType.ExportAll;
exportSettings.BaseFileName = "exportfile";
exportsettings.FileLocation = @"c:\";
SPExport export = new SPExport(SPExportSettings);
Export.Run();
//questo il codice per importare il sito precedentemente esportato nella site collection di destinazione
SPImportSettings importSettings = new SPImportSettings;
importSettings.BaseFileName = "exportfile";
importSettings.FileLocation = @"c:\";
importSettings.SiteUrl = "http://newweb";
SPImport import = new SPImport(SPImportSettings);
Import.Run();
E' importante notare che gli oggetti SPExportSetting/SPImportSettings permettono di specificare come/cosa importare/esportare
(ad esempio esportare le autorizzazioni, le versioni e il mantenimento degli GUID originali degli oggetti).
Quello fatto però è un esempio che potrebbe trarre in inganno circa le potenzialità della Migration API.
In realtà l'API ci permette di esportare/importare anche una singola lista. Come?
Basta leggere la serie di articoli pubblicati da Stefan Goßner sul suo Blog.
Ora, dato che l'appetito vien mangiando, complementando queste funzioni dell'API con un qualche meccanismo di regolamentazione
delle operazioni di replica ed un paio di event handler (o di Workflow, fate voi) diventa possibile creare un sistema
di replicazione bidirezionale di contenuti in maniera da avere delle farm WSS/MOSS i cui contenuti sono sincronizzati
realizzando così la feature di geolocazione (ovvere avere i dati il più vicino possibile agli utenti) tanto agognata.
Ovviamente in attesa di MOSS v14.....