Creazione di applicazioni per Windows Phone 7 con i...
Transcript of Creazione di applicazioni per Windows Phone 7 con i...
Creazione di applicazioni per Windows Phone 7 con i prodotti SharePoint 2010 e Unified Access Gateway
Questo documento viene fornito «così com'è». Le informazioni e le opinioni espresse nel presente
documento, inclusi gli URL e altri riferimenti a siti Web Internet, possono essere soggette a modifiche senza
preavviso. L'utente accetta di utilizzarlo a proprio rischio.
Alcuni esempi illustrati nel presente documento vengono forniti a scopo esclusivamente esemplificativo e
sono fittizi. Nessuna associazione o connessione reale è intenzionale o può essere desunta..
Il presente documento non implica la concessione di alcun diritto di proprietà intellettuale relativo ai prodotti
Microsoft. È possibile copiare e utilizzare questo documento per fini di riferimento interno. Il documento può
essere modificato per fini di riferimento interno.
Microsoft, SharePoint, Silverlight, Visual Studio e Windows Phone 7 sono marchi o marchi registrati di
Microsoft Corporation negli Stati Uniti e/o in altri paesi.
Copyright © 2011 Microsoft Corporation. Tutti i diritti riservati.
2
Creazione di applicazioni per Windows Phone 7 con i prodotti SharePoint 2010 e Unified Access Gateway
Dave Pae
Microsoft Corporation
Todd Baginski
Aptillon, Inc.
Matthew McDermott
Aptillon, Inc.
Ben Ari
Microsoft Corporation
Marzo 2011
Si applica a: Microsoft® SharePoint® Server 2010, Microsoft SharePoint Foundation
2010, Microsoft Forefront Unified Access Gateway, Windows Phone 7™
Riepilogo:
In questo documento vengono descritti scenari aziendali per lo sviluppo di applicazioni per
dispositivi mobili basate sulle funzionalità di collaborazione dei prodotti SharePoint 2010 e
sull'autenticazione tramite Microsoft Forefront Unified Access Gateway (UAG). Nel corpo
principale del documento vengono presentati i concetti e il codice per accedere in modo sicuro a
dati di elenchi SharePoint da Windows Phone 7. Nell'appendice invece vengono descritte
l'installazione e la configurazione di un'istanza per sviluppatori di UAG per il testing e lo sviluppo
di applicazioni per dispositivi mobili con i prodotti SharePoint 2010.
3
Sommario Sommario ........................................................................................................................................................................................................................................................................... 3 Panoramica e obiettivi .................................................................................................................................................................................................................................................. 5 Architettura ....................................................................................................................................................................................................................................................................... 6
Intranet dei prodotti SharePoint 2010 ........................................................................................................................................................................................................ 6
UAG ............................................................................................................................................................................................................................................................................ 6 Scenario di collaborazione Intranet ........................................................................................................................................................................................................................ 6
Valore aziendale della collaborazione ......................................................................................................................................................................................................... 7
Applicazione ........................................................................................................................................................................................................................................................... 7 Sicurezza ......................................................................................................................................................................................................................................................................... 11
Archiviazione delle credenziali.................................................................................................................................................................................................................... 11
Autenticazione ................................................................................................................................................................................................................................................... 11 Servizi di SharePoint .................................................................................................................................................................................................................................................. 12
Utilizzo dei servizi............................................................................................................................................................................................................................................. 12
Accesso a dati di elenchi SharePoint tramite la libreria client OData .......................................................................................................................................... 12
Feed attività RSS ................................................................................................................................................................................................................................................ 20
Servizio profili utente - Colleghi .................................................................................................................................................................................................................. 23
Servizio profili utente - Dati dei profili utente ....................................................................................................................................................................................... 26 Test .................................................................................................................................................................................................................................................................................... 29
Test dell'applicazione nell'emulatore ....................................................................................................................................................................................................... 29
Test dell'applicazione in un dispositivo ................................................................................................................................................................................................... 29 Considerazioni sul marketplace ............................................................................................................................................................................................................................. 29 Conclusioni ..................................................................................................................................................................................................................................................................... 33 Appendice - Installazione e configurazione di UAG per i prodotti SharePoint 2010 ........................................................................................................................ 34
1. Creare una macchina virtuale di SharePoint Server e una macchina virtuale di UAG ...................................................................................................... 34
2. Configurare reti virtuali per il computer host Hyper-V ................................................................................................................................................................ 35
3. Configurare reti di macchine virtuali Hyper-V ................................................................................................................................................................................. 36
4. Preparare la macchina virtuale del server UAG per l'installazione di UAG ........................................................................................................................... 40
5. Creare uno snapshot della macchina virtuale del server UAG .................................................................................................................................................... 41
6. Installare il server UAG .............................................................................................................................................................................................................................. 41
7. Creare uno snapshot della macchina virtuale del server UAG .................................................................................................................................................... 47
8. Configurazione e attivazione iniziali del server UAG ..................................................................................................................................................................... 48
9. Creare il trunk HTTP per la pubblicazione del sito di SharePoint ............................................................................................................................................ 63
10. Creare l'applicazione di SharePoint ................................................................................................................................................................................................... 73
11. Configurare l'applicazione di SharePoint ......................................................................................................................................................................................... 84
12. Attivare la configurazione ...................................................................................................................................................................................................................... 85
13. Configurare e verificare i mapping di accesso alternativo di SharePoint ............................................................................................................................ 86
4
14. Aggiungere voci dei file degli host all'ambiente di sviluppo ..................................................................................................................................................... 87
15. Testare la configurazione ....................................................................................................................................................................................................................... 88
16. Testare il newsfeed RSS .......................................................................................................................................................................................................................... 93 Risorse ............................................................................................................................................................................................................................................................................. 96
Forefront Unified Access Gateway in TechNet ...................................................................................................................................................................................... 96
Blog Closer to the Edge ................................................................................................................................................................................................................................... 96
Blog del team dei servizi Web di Silverlight ........................................................................................................................................................................................... 96 Informazioni sugli autori .......................................................................................................................................................................................................................................... 96
Todd Baginski, MVP ......................................................................................................................................................................................................................................... 96
Matthew McDermott, MVP ............................................................................................................................................................................................................................ 96
Ben Ari ................................................................................................................................................................................................................................................................... 97
5
Panoramica e obiettivi Man mano che le organizzazioni si espandono, cambiano e si adeguano alle nuove tecnologie, esiste il rischio che i dipendenti non riescano a mantenersi in contatto con la collettività dell'azienda. I prodotti Microsoft® SharePoint 2010 supportano numerose funzionalità per le attività e la collaborazione dei dipendenti, dagli elenchi e le raccolte per l'archiviazione e la gestione di documenti e informazioni, ai profili utente centralizzati che consentono ai dipendenti di fornire una descrizione di se stessi e del ruolo svolto all'interno dell'organizzazione, fino alle funzionalità di inserimento di tag e note che facilitano l'individuazione di informazioni all'interno e all'esterno del firewall. Windows Phone 7™ è la versione per dispositivi mobili più recente che supporta la visione Microsoft di un ambiente di lavoro mobile. Windows Phone viene fornito con numerose funzionalità che supportano «Office nel cloud», incluse applicazioni che consentono di aprire e leggere documenti di Microsoft Office. Le funzionalità di sviluppo in Windows Phone 7 sono personalizzate per gli sviluppatori .NET che hanno familiarità con le operazioni di sviluppo in .NET e Microsoft Silverlight®. Lo scopo di questo documento è offrire agli sviluppatori Windows Phone e agli sviluppatori SharePoint la possibilità di creare applicazioni aziendali in grado di sfruttare le potenzialità dei prodotti SharePoint 2010 da Windows Phone.
Nota In questo documento con il termine prodotti SharePoint 2010 si intende Microsoft SharePoint® Server 2010 e Microsoft SharePoint Foundation 2010, a meno che non venga specificato diversamente. Negli esempi e negli scenari viene utilizzato SharePoint Server 2010.
In questo documento vengono fornite indicazioni per gli scenari di sviluppo seguenti:
Preparazione per la connessione ai prodotti SharePoint 2010 dalle applicazioni per Windows Phone 7
Connessione a SharePoint tramite Unified Access Gateway
Connessione, autenticazione e utilizzo dei servizi Web di SharePoint
Creazione e aggiornamento di elementi di elenchi SharePoint
Utilizzo di feed RSS forniti da SharePoint
6
Architettura Nello scenario illustrato in questo documento Contoso consente ai propri
dipendenti di connettersi ai prodotti SharePoint 2010 tramite Forefront
Unified Access Gateway (UAG). UAG converte il nome host esterno
configurato sul telefono nel nome host interno configurato in SharePoint e
aggiunge un livello di sicurezza e autenticazione richiesto dalle organizzazioni
per proteggere e controllare le proprietà Web aziendali.
Intranet dei prodotti SharePoint 2010 La rete Intranet di Contoso è un'implementazione aziendale dei prodotti
SharePoint 2010. Il sito è configurato con un'applicazione di servizio profili
utente e un'applicazione del servizio di ricerca. Nell'applicazione per dispositivi
mobili verrà utilizzato il servizio Web del servizio profili utente per consentire
ai dipendenti di visualizzare informazioni sui profili utente sui propri cellulari.
Per ulteriori informazioni sulla configurazione dell'applicazione di servizio
profili utente, vedere Amministrazione del servizio profili utente (SharePoint
Server 2010) (http://technet.microsoft.com/it-it/library/ee721050.aspx).
UAG La pubblicazione di un sito di SharePoint tramite un server UAG in un ambiente di sviluppo comporta la
configurazione di reti nel computer host Hyper-V, nel server in cui viene eseguito SharePoint Server 2010 e
nel server UAG, nonché l'installazione e la configurazione del server UAG.
Nell'appendice viene descritto come configurare queste reti e come installare e configurare un server UAG
per pubblicare un sito di SharePoint per lo sviluppo in Windows Phone 7. Queste operazioni si applicano a un
ambiente di sviluppo o a un altro tipo di ambiente non di sviluppo. Se si distribuisce un ambiente simile a
questo in un ambiente di produzione, vedere la Guida alla pubblicazione in SharePoint (le informazioni
potrebbero essere in lingua inglese) (http://go.microsoft.com/fwlink/?LinkID=206256) in TechNet.
Scenario di collaborazione Intranet Contoso può contare su personale esperto che lavora in diverse aree di produzione, tra cui il settore
farmaceutico e l'elettronica. La direzione dell'azienda basa la propria politica sull'integrazione tra personale e
software per un ambiente di lavoro non solo più produttivo, ma anche in grado di usufruire di maggiori
capacità di connessione dal punto di vista dei dipendenti. Contoso desidera che tutti possano interagire
facilmente con i dati per offrire un ambiente di lavoro sereno e produttivo. L'azienda può contare su una
struttura di base ottimale grazie alla distribuzione dei prodotti SharePoint 2010, l'applicazione enterprise
centrale per il consolidamento dei dati e delle attività degli utenti. L'azienda desidera andare oltre e offrire
una soluzione di mobilità sviluppando un'applicazione per dispositivi mobili che consenta agli utenti di
visualizzare le proprie attività da SharePoint, tenere traccia dei colleghi e aggiornare elenchi ospitati nella
rete Intranet SharePoint.
7
Valore aziendale della collaborazione Sebbene alcune società possano considerare ardita la correlazione diretta tra valore aziendale e funzionalità
di collaborazione dei prodotti SharePoint 2010, Contoso ha individuato una relazione diretta tra la possibilità
di mettere in contatto le persone tra loro e la creazione di un senso di aggregazione con SharePoint. Più i
dipendenti mantengono i contatti con i propri amici nell'ambiente di lavoro, maggiore sarà la sensazione di
soddisfazione nel proprio lavoro. Questa sensazione di soddisfazione dà luogo a una maggiore capacità di
trattenere i dipendenti e a una migliore capacità di formazione di nuovi dipendenti. Una maggiore capacità di
trattenere i dipendenti comporta a sua volta una riduzione del costo delle assunzioni e un miglioramento
degli utili netti della società.
Applicazione Contoso desidera replicare nella propria applicazione per dispositivi mobili molte delle funzionalità offerte
dai siti personali di SharePoint in un Web browser. Il flusso dell'applicazione sarà costituito da una pagina
panoramica con caselle di riepilogo per gli utenti visualizzati recentemente, il newsfeed personale, le attività
personali e i colleghi. Ogni volta che un utente selezionerà l'immagine di un altro utente, il profilo dell'utente
selezionato verrà aperto in una nuova pagina. I risultati di ricerca verranno presentati in una casella di
riepilogo e selezionando un utente verrà visualizzato il profilo corrispondente. Nella figura 1 vengono
illustrati questi componenti.
Figura 1. Funzionalità di social networking di SharePoint che Contoso desidera utilizzare nell'applicazione per
Windows Phone 7
Elenco di attività personale
Ogni sito personale include un elenco di attività che può essere gestito dal dipendente per tenere traccia dei
propri progressi relativamente alle assegnazioni. L'applicazione si connetterà all'elenco di attività del sito
personale e consentirà al dipendente di creare, aggiornare ed eliminare attività.
Newsfeed personale
Newsfeed personale (figura 2) nel sito personale di SharePoint consente agli utenti di accedere alle ultime
notizie sulla società. Poiché è estendibile, le organizzazioni come Contoso possono aggiungere ulteriori canali
per eventi di attività di altri sistemi.
8
Figura 2. Newsfeed personale in un sito di SharePoint visualizzato in un Web browser
Colleghi personali
Questo elenco di colleghi gestito da un utente («persone che seguo») è una risorsa utile (figura 3). Contoso
desidera duplicare tale elenco nell'applicazione per dispositivi mobili.
Figura 3. Colleghi personali in un sito di SharePoint visualizzato in un Web browser
9
Nell'applicazione per Windows Phone verrà utilizzato il controllo panorama per visualizzare le informazioni,
inclusi i profili aperti recentemente, in un pannello continuo (figura 4).
Figura 4. Controllo panorama che consente di visualizzare la vista olistica dell'applicazione per Windows
Phone 7
Scheda del profilo
Selezionando un utente verranno visualizzati i dettagli del profilo dell'utente (figura 5). Nella scheda del
profilo verranno mostrate informazioni sull'utente nella visualizzazione per la versione mobile.
10
Figura 5. Dettagli relativi a un utente in un sito di SharePoint visualizzato in un Web browser
Figura 6. Dettagli su un utente in un sito di SharePoint visualizzato nell'applicazione per Windows Phone 7
11
Sicurezza Lo sviluppatore Windows Phone deve tenere conto della sicurezza sia per i dati in transito che per i dati
archiviati. Per garantire l'archiviazione sicura delle credenziali, vengono utilizzati la crittografia e uno spazio
di archiviazione isolato. Per ulteriori informazioni sulle funzionalità di sicurezza del telefono, vedere Sicurezza
per Windows Phone (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=215977) in MSDN.
Archiviazione delle credenziali Windows Phone 7 supporta gli algoritmi di crittografia seguenti:
AES
HMACSHA1
HMACSHA256
Rfc2898DeriveBytes
SHA1
SHA256
È importante che lo sviluppatore di un'applicazione per dispositivi mobili che prevede l'archiviazione delle
credenziali nel telefono tenga conto della sicurezza delle credenziali archiviate qualora il dispositivo vada
perduto o venga danneggiato.
Autenticazione Windows Phone 7 non supporta l'autenticazione NTLM. Le richieste di servizi Web dal telefono tramite UAG
devono creare l'intestazione di autenticazione corretta recuperando le credenziali dell'utente dallo spazio di
archiviazione crittografato e allegandole all'intestazione dell'oggetto HttpWebRequest. Le richieste Web
devono essere effettuate su HTTPS e le intestazioni di autenticazione devono essere passate, come illustrato
nell'esempio seguente.
upsRequest.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(
Encoding.UTF8.GetBytes(AppSettings.Username + ":" + AppSettings.Password)) +
System.Environment.NewLine;
Se viene utilizzato un riferimento a un servizio WCF, l'intestazione può essere aggiunta al client SOAP
accedendo a OperationContextScope, come illustrato nell'esempio seguente.
using (OperationContextScope scope =
new OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
request.Headers[System.Net.HttpRequestHeader.Authorization] =
12
"Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Username + ":" +
AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.OutgoingMessageProperties.Add(
HttpRequestMessageProperty.Name, request);
//Call the method
ups.GetUserColleaguesAsync(account);
}
Servizi di SharePoint
Utilizzo dei servizi L'applicazione utilizzerà diversi servizi di SharePoint per soddisfare i requisiti aziendali, come illustrato nella
tabella seguente.
Requisito URL del servizio Metodo
Leggere e aggiornare
dati di elenchi
http://sharepoint/_vti_bin/listdata.svc Libreria client OData
Visualizzare il
newsfeed dell'utente
http://mysitehost/_layouts/activityfeed.aspx?consolidate
d=true
Utilizzare il feed RSS
fornito
Visualizzare i colleghi
dell'utente
http://mysitehost/_vti_bin/userprofileservice.asmx GetUserColleagues
Visualizzare il profilo
utente
http://mysitehost/_vti_bin/userprofileservice.asmx GetUserProfileByName
Accesso a dati di elenchi SharePoint tramite la libreria client OData La pubblicazione di una raccolta siti di SharePoint tramite un server UAG consente l'integrazione tra le
applicazioni per Windows Phone 7 e le API REST di SharePoint. La Libreria client OData per Windows Phone 7
Series CTP (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=215984&clcid=0x410 (le informazioni potrebbero essere in lingua
inglese)) consente ai dispositivi Windows Phone 7 di utilizzare feed di OData. Le API REST di SharePoint
possono essere chiamate utilizzando la libreria client OData per fornire operazioni di creazione, lettura,
13
aggiornamento ed eliminazione (CRUD, Create, Read, Update, Delete) per i dati di elenchi SharePoint. In
questo modo è possibile integrare dispositivi Windows Phone 7 con applicazioni di collaborazione basate
sulla piattaforma SharePoint. Nell'esempio di codice seguente viene illustrato come utilizzare la libreria client
OData e le API REST di SharePoint per eseguire operazioni CRUD sui dati di elenchi SharePoint.
Poiché non è possibile aggiungere riferimenti ai servizi per le API REST di SharePoint in un'applicazione per
Windows Phone 7, è necessario generare manualmente una classe proxy e aggiungerla come riferimento al
progetto in Microsoft Visual Studio®. Per generare la classe proxy, viene utilizzato DataSvcUtil.exe
(http://go.microsoft.com/fwlink/?LinkID=215987). In questo scenario la classe proxy è denominata
CONTOSOINTRANETDATACONTEXT e viene utilizzata diffusamente negli esempi di codice che seguono.
Il metodo LOADTASK mostra come caricare le attività da un elenco di attività di SharePoint. In questo metodo
la classe CONTOSOINTRANETDATACONTEXT utilizza le impostazioni di ISOLATEDSTORAGE per determinare il sito di
SharePoint a cui connettersi. Il gestore eventi SENDINGREQUEST viene assegnato all'istanza di
CONTOSOINTRANETDATACONTEXT. Questo gestore eventi viene attivato quando la classe
CONTOSOINTRANETDATACONTEXT richiama una richiesta per le API REST di SharePoint. L'operazione REST viene
definita da REQUESTURI e il metodo BEGINEXECUTE invia la richiesta. Il metodo BEGINEXECUTE registra inoltre il
metodo di callback asincrono che viene attivato al completamento della query.
private void LoadTasks()
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
if (allTasks == null)
{
allTasks = new ObservableCollection<Task>();
}
ObservableCollection<TasksItem> tasks = new
ObservableCollection<TasksItem>();
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
context.SendingRequest += new EventHandler<SendingRequestEventArgs>(
14
context_SendingRequest);
//Set the URI to query the Tasks list
//Expand is used to retrieve lookup column values
Uri requestUri = new Uri(context.BaseUri.OriginalString +
"/Tasks()?$expand=AssignedTo,CreatedBy,ModifiedBy");
//Start the async call to query SharePoint
context.BeginExecute<TasksItem>(requestUri, QueryCallback, null);
});
}
Il gestore eventi SENDINGREQUEST viene attivato quando la query OData viene inviata ai prodotti SharePoint
2010. Il codice di questo gestore eventi è molto importante. Senza di esso, un server UAG non è in grado di
identificare correttamente un dispositivo Windows Phone 7 e interagire in modo appropriato per
l'autenticazione di un utente. L'INTESTAZIONE USER-AGENT determina che un server UAG risponda con un codice
HTTP 401 anziché 302. L'INTESTAZIONE AUTHORIZATION include le credenziali crittografate dell'utente che accede
al feed di OData. Le credenziali crittografate vengono utilizzate dal server UAG per autenticare l'utente.
private void context_SendingRequest(object sender, SendingRequestEventArgs e)
{
e.RequestHeaders["User-Agent"] = "Microsoft Office Mobile";
e.RequestHeaders["Authorization"] = "Basic " + Convert.ToBase64String(
Encoding.UTF8.GetBytes(App.Credential.Name + ":" +
App.Credential.Password)) + System.Environment.NewLine;
}
Dopo l'invio della query al server in cui è in esecuzione SharePoint Server, viene attivato il metodo
QUERYCALLBACK. Questo metodo analizza i risultati restituiti dalla query e li aggiunge all'oggetto
ObservableCollection associata agli elementi dell'interfaccia utente nell'applicazione telefonica.
private void QueryCallback(IAsyncResult asyncResult)
{
IEnumerable<TasksItem> results;
allTaskItems = new ObservableCollection<TasksItem>();
results = context.EndExecute<TasksItem>(asyncResult).ToList()
as IEnumerable<TasksItem>;
15
ObservableCollection<Task> returnedTasks =
new ObservableCollection<Task>();
foreach (TasksItem tasksItem in results)
{
//Code omitted for brevity: Retrieve metadata about the task…
//Create the new Task and set its properties
Task task = new Task()
{
Title = tasksItem.Title,
Priority = taskPriority,
TaskStatus = taskStatus,
Body = tasksItem.Description,
Author = authorUser.Name,
Editor = editorUser.Name,
AssignedTo = assignedToUser.Name,
StartDate = DateTime.Parse(tasksItem.StartDate.ToString()),
Modified = DateTime.Parse(tasksItem.Modified.ToString()),
Created = DateTime.Parse(tasksItem.Created.ToString()),
DueDate = DateTime.Parse(tasksItem.DueDate.ToString()),
UIVersion = 1,
Last_x0020_Modified =
DateTime.Parse(tasksItem.Modified.ToString()),
Created_x0020_Date =
DateTime.Parse(tasksItem.Created.ToString()),
PercentComplete = (int)finalPercentComplete,
ListID = tasksItem.Id
};
//Add each task to the ObservableCollection bound to UI elements.
returnedTasks.Add(task);
allTaskItems.Add(tasksItem);
}
allTasks = returnedTasks;
16
//UI callback methods omitted for brevity
}
Il metodo SAVETASK crea nuove attività e aggiorna attività esistenti. Nel codice seguente viene illustrato come
utilizzare la libreria client OData per creare nuove attività o aggiornare attività esistenti in un elenco di
attività di SharePoint da un dispositivo Windows Phone 7. La classe TASKSITEM rappresenta un'attività di un
elenco di attività. Viene creata un'istanza di TASKSITEM e le relative proprietà vengono impostate sui valori del
form utilizzato per creare o modificare attività. L'istanza di TASKSITEM viene quindi confrontata con le attività
già caricate nel telefono per controllare se l'attività esiste già. Questo controllo determina se la libreria client
OData deve essere utilizzata per creare una nuova attività nell'elenco di attività di SharePoint o per
aggiornarne una esistente. Il metodo BEGINSAVECHANGES richiama l'operazione appropriata e registra il
metodo di callback SAVECHANGESCALLBACK.
public void SaveTask(Task task, Action<Task> callback)
{
taskToSave = task;
#region Create/update new task object
saveTaskCallback = callback;
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the appropriate SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
context.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(context_SendingRequest);
TasksItem tasksItem = new TasksItem();
tasksItem.Title = task.Title;
tasksItem.Description = task.Body;
tasksItem.AssignedToId = assignedToUserID;
tasksItem.PriorityValue = task.Priority.DisplayString;
17
tasksItem.StartDate = task.StartDate;
tasksItem.DueDate = task.DueDate;
//Set percent complete
if (task.PercentComplete > 0)
{
tasksItem.Complete = (double)task.PercentComplete / 100;
}
else
{
tasksItem.Complete = (double)0;
}
//Set tasks status
tasksItem.StatusValue = task.TaskStatus.DisplayString;
//If the task already exists then update it
if (allTasks.Count > 0 && DoesTaskExist(taskToSave) && task.ListID != 0)
{
tasksItem.Id = task.ListID;
context.AttachTo("Tasks", tasksItem, "*");
context.UpdateObject(tasksItem);
}
//If the task does not exist then create it
else
{
context.AddToTasks(tasksItem);
}
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Start the async call to SharePoint to commit the changes
context.BeginSaveChanges(saveChangesCallBack, context);
}
);
18
}
Al termine della query, viene attivato il metodo SAVECHANGESCALLBACK, che analizza i risultati restituiti dalla
query e aggiorna l'oggetto ObservableCollection associato agli elementi dell'interfaccia utente nel telefono.
private void saveChangesCallBack(IAsyncResult asyncResult)
{
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Get the data context from the response
context = asyncResult.AsyncState as ContosoIntranetDataContext;
//Call the endsavechanges method to commit the change
DataServiceResponse response = context.EndSaveChanges(asyncResult);
//If the task already exists then update it
if (allTasks.Count > 0 && DoesTaskExist(taskToSave))
{
for (int i = 0; i < allTasks.Count; i++)
{
if (allTasks[i].ListID == taskToSave.ListID)
{
//Update the corresponding task in the in-memory collection
allTasks[i] = taskToSave;
//Call the callback to tell the UI the save operation is complete
saveTaskCallback.DynamicInvoke(taskToSave);
break;
}
}
}
//If the task does not exist then create it
else
{
//Add the task to the in-memory collection
allTasks.Add(taskToSave);
//Call the callback to tell the UI the save operation is complete
saveTaskCallback.DynamicInvoke(taskToSave);
19
}
}
);
}
Il metodo DELETETASK mostra come utilizzare la libreria client OData per eliminare attività di un elenco di
attività di SharePoint da un dispositivo Windows Phone 7. Questo metodo utilizza l'ID associato a un'attività
selezionata nell'applicazione per Windows Phone 7 e crea un oggetto TASK basato sull'ID. L'oggetto TASK viene
utilizzato per individuare la classe TASKSITEM corrispondente nel contesto della libreria client OData associato
all'elenco di attività di SharePoint. Dopo essere stata individuata, questa voce viene contrassegnata per
l'eliminazione. Il metodo di callback BEGINSAVECHANGES richiama l'API REST di SharePoint e registra il metodo
di callback DELETECALLBACK.
public void DeleteTask(int ID, Action callback)
{
deleteTaskCallback = callback;
taskToDelete = GetTask(ID);
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the appropriate SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
context.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(context_SendingRequest);
foreach (TasksItem tasksItem in allTaskItems)
{
if (tasksItem.Id == taskToDelete.ListID)
{
context.MergeOption = MergeOption.OverwriteChanges;
context.AttachTo("Tasks", tasksItem, "*");
context.DeleteObject(tasksItem);
//Start the async call to SharePoint to commit the delete
20
context.BeginSaveChanges(DeleteCallback, context);
break;
}
}
}
Al termine della query, viene attivato il metodo DELETECALLBACK, che analizza i risultati restituiti dalla query e
rimuove l'attività dall'oggetto ObservableCollection associato agli elementi dell'interfaccia utente nel
telefono.
private void DeleteCallback(IAsyncResult asyncResult)
{
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Get the data context from the response
context = asyncResult.AsyncState as ContosoIntranetDataContext;
//Call the endsavechanges method to commit the change
DataServiceResponse response = context.EndSaveChanges(asyncResult);
// Remove the task from the in-memory collection as well
if (taskToDelete != null)
{
//Remove the task from the in-memory collection
GetAllTasks().Remove(taskToDelete);
//Call the callback to tell the UI the delete operation is complete
deleteTaskCallback.DynamicInvoke();
}
}
);
}
Feed attività RSS
Il newsfeed personale e le attività recenti vengono pubblicati dall'host del sito personale come feed RSS.
L'applicazione deve solo richiedere il feed RSS, scaricare la stringa e aggiungere i risultati a un oggetto
insieme. Le attività vengono pubblicate dall'host siti personali nell'URL
21
http://<hostsitipersonali>/_layouts/activityfeed.aspx?consolidated=true. Testare il feed RSS seguendo le
indicazioni fornite nell'appendice alla fine di questo documento prima di tentare l'accesso tramite il codice
riportato di seguito.
Il metodo LoadNewsfeed mostra come richiedere il feed attività consolidato per l'utente autenticato tramite
UAG. Viene creato un nuovo oggetto HtpWebRequest passando l'URI del feed attività consolidato. Vengono
aggiunte alla richiesta le intestazioni client necessarie. Account e Password sono variabili a cui si accede dallo
spazio di archiviazione isolato crittografato. Per facilitare l'utilizzo del modello Model View View Model, viene
utilizzato MVVM Light Toolkit. Per ulteriori informazioni, vedere il Sito Web di MVVM Light Toolkit (le
informazioni potrebbero essere in lingua inglese) (http://go.microsoft.com/fwlink/?LinkId=216135). In
questo esempio viene chiamato il metodo DispatcherHelper.CheckBeginInvokeOnUI per gestire l'oggetto
ResponseStream e i risultati vengono passati ad AddNewsfeedItems per estrarre i valori dei risultati e
aggiungerli all'insieme NewsfeedItems.
private void LoadNewsfeed()
{
//My Newsfeed RSS URL
string url =
String.Format(“{0}/my/_layouts/activityfeed.aspx?consolidated=true",
AppSettings.Url);
System.Uri authServiceUri = new Uri(url);
HttpWebRequest client =
WebRequest.CreateHttp(authServiceUri) as HttpWebRequest;
//Add the necessary headers for UAG
client.Headers["User-Agent"] = "Microsoft Office Mobile";
client.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Username + ":" +
AppSettings.Password))+
System.Environment.NewLine;
client.AllowReadStreamBuffering = true;
client.AllowAutoRedirect = true;
// Call and handle the response.
client.BeginGetResponse((asResult) =>
{
DispatcherHelper.CheckBeginInvokeOnUI(
() =>
{
try
22
{
var response = client.EndGetResponse(asResult);
StreamReader reader = new
StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
AddNewsfeedItems(responseString);
}
catch (WebException failure)
{
throw failure;
}
});
},
null);
}
Al termine del download, AddNewsfeedItems aggiunge i risultati all'insieme associato all'interfaccia utente.
L'oggetto responseString viene analizzato in un oggetto XDocument e i due spazi dei nomi vengono aggiunti.
Viene utilizzato LINQ per eseguire query sull'insieme di voci e creare oggetti MyNewsfeedViewModel che
archiviano gli elementi di newsfeed risultanti e le informazioni sugli autori. Gli elementi infine vengono
aggiunti all'insieme MyNewsFeedItems.
private void AddNewsfeedItems(string responseString)
{
//Parse the XML Response
XDocument newsfeedDoc = XDocument.Parse(responseString);
//Add the necessary Namespaces
XNamespace ns = "http://www.w3.org/2005/Atom";
XNamespace af = "AF";
//Use LINQ to extract the information into a ViewModel
IEnumerable<MyNewsfeedViewModel> entries = from entry in
newsfeedDoc.Descendants(XName.Get("entry", ns.NamespaceName))
select new MyNewsfeedViewModel()
{
Summary = entry.Element(ns + "summary").Value,
Published = entry.Element(ns + "published").Value,
Author =
23
(from author in entry.Descendants(XName.Get("author",
ns.NamespaceName))
select new PersonViewModel(NavigationService)
{
AccountName = author.Element(af + "AccountName").Value,
Name = author.Element(ns + "name").Value,
PersonalSiteUrl = author.Element(ns + "uri").Value,
Email = author.Element(ns + "email").Value,
PictureUrl = author.Element(af + "Picture").Value
}).FirstOrDefault()};
//Add the resulting items to the Collection bound to the UI controls
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
foreach (MyNewsfeedViewModel e in entries.ToList())
{
MyNewsfeedItems.Add(e);
}
});
}
Servizio profili utente - Colleghi Il servizio profili utente di SharePoint consente di visualizzare, creare, modificare e gestire informazioni dei
profili utente nei prodotti SharePoint 2010. Il servizio è il punto di ingresso principale per consentire
all'applicazione di recuperare informazioni sui colleghi dell'utente e sui profili utente. Nel codice riportato di
seguito viene illustrato come chiamare il servizio profili utente da Windows Phone 7 tramite UAG.
24
Creare il riferimento al servizio profili utente
Per iniziare, aggiungere un riferimento al servizio nel progetto di Windows Phone 7. Immettere l'URL
dell'endpoint del servizio profili utente di SharePoint, ad esempio:
http://spwp7intranet.contoso.com/_vti_bin/userprofileservice.asmx
Assegnare al riferimento al servizio un nome riconoscibile, ad esempio UserProfileService, quindi fare clic su OK.
Metodo Web GetUserColleagues
Il metodo LoadColleagueData utilizza il metodo GetUserColleaguesAsync del servizio profili utente per
restituire un insieme di colleghi come oggetti ContactData. Dopo la creazione di BasicHttpBinding e di
EndpointAddress, viene creato un nuovo oggetto UserProfileServiceSoapClient con i parametri necessari.
Le chiamate al servizio in Silverlight devono essere eseguite in modo asincrono. Viene aggiunto un nuovo
gestore eventi OnCompleted per l'evento GetUserColeaguesCompleted. Per aggiungere le intestazioni
richieste da UAG, viene utilizzata una classe OperationContextScope e viene creato un oggetto
HttpRequestMessageProperty per includere le due intestazioni necessarie per l'autenticazione in UAG.
Le intestazioni vengono aggiunte al messaggio in uscita e viene eseguita la chiamata asincrona al metodo
GetUserColleaguesAsync utilizzando l'account utente come parametro.
private void LoadColleagueData()
{
string url =
String.Format("{0}/_vti_bin/userprofileservice.asmx", AppSettings.Url);
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress(url);
UserProfileService.UserProfileServiceSoapClient ups =
new UserProfileServiceSoapClient(binding, endpoint);
//Add the Event Completed Handler
ups.GetUserColleaguesCompleted +=
new EventHandler<GetUserColleaguesCompletedEventArgs>(
ups_GetUserColleaguesCompleted);
//Add the credentials
using (OperationContextScope scope =
new OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
25
request.Headers[System.Net.HttpRequestHeader.Authorization] =
"Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Account +
":" + AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.OutgoingMessageProperties.Add(
HttpRequestMessageProperty.Name, request);
//Call the method
ups.GetUserColleaguesAsync(account);
}
}
Quando il metodo GetUserColleaguesAsync restituisce i risultati, viene chiamato l'evento
ups_GetUserColleaguesCompleted. Se non vengono rilevati errori, viene utilizzato LINQ per creare un elenco
di classi PersonViewModels dall'oggetto ContactData risultante. L'ultimo passaggio consiste nell'aggiungere
PersonViewModels dall'elenco all'oggetto ColleaguesList nel thread dell'interfaccia utente chiamando
CheckBeginInvoke e passando l'elenco di PersonViewModels.
private void ups_GetUserColleaguesCompleted(object sender,
GetUserColleaguesCompletedEventArgs e)
{
if (e.Error == null)
{
//Create a list of PersonViewModels
IEnumerable<PersonViewModel> colleagues =
from contact in e.Result
select new PersonViewModel()
{
AccountName = contact.AccountName,
UserProfileID = contact.UserProfileID.ToString(),
Name = contact.Name,
Title = contact.Title,
Email = contact.Email,
PersonalSiteUrl = contact.Url
26
};
//Load the Colleagues list on the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
foreach (PersonViewModel c in colleagues.ToList())
{
Colleagues.Add(c);
}
});
}
else
{
Debug.WriteLine("Error loading the Colleagues List: {0}",
e.Error.Message);
}
}
Servizio profili utente - Dati dei profili utente Il metodo Web GetUserColleagues non restituisce i profili utente. Restituisce l'oggetto ContactData, che può
essere passato al metodo GetUserProfileByName del servizio profili utente che restituisce un oggetto
profili utente completo, il quale può quindi essere utilizzato per visualizzare un profilo utente completo.
Il metodo seguente viene utilizzato per restituire i dettagli dei profili utente dei colleghi. In particolare,
verranno restituiti i campi AboutMe, WorkPhone, MobilePhone e PictureURL.
Il metodo GetUserProfileProperties utilizza un oggetto PersonViewModel per la persona di cui si desidera
recuperare il profilo. In questo metodo viene costruito un controllo messaggi per risolvere un problema che
impedisce l'analisi corretta del valore restituito da PropertyData. Viene quindi creato un oggetto
BasicHttpMessageInspectorBinding che utilizza il controllo messaggi come parametro, passa l'associazione
e l'endpoint al costruttore dell'oggetto UserProfileServiceSoapClient e registra il gestore eventi
GetUserProfileByNameCompleted. Per aggiungere le intestazioni della richiesta necessarie per UAG, una
classe OperationContextScope aggiunge le intestazioni Authorization e UserAgent alla richiesta. Viene
chiamato infine il metodo GetUserProfileByNameAsync e viene passato l'oggetto Account Name dell'utente
e l'oggetto PersonViewModel che si desidera aggiornare.
27
private void GetUserProfileProperties(PersonViewModel person)
{
//URL for the service
string url = String.Format("{0}/_vti_bin/userprofileservice.asmx",
AppSettings.ServerUrl);
//Create the Message Inspector
SPAsmxMessageInspector messageInspector = new SPAsmxMessageInspector();
//Apply the Message Inspector to the Binding
BasicHttpMessageInspectorBinding binding = new
BasicHttpMessageInspectorBinding(messageInspector);
EndpointAddress endpoint = new EndpointAddress(url);
UserProfileService.UserProfileServiceSoapClient ups = new
UserProfileServiceSoapClient(binding, endpoint);
//Add the Event Completed Handler
ups.GetUserProfileByNameCompleted += new
EventHandler<GetUserProfileByNameCompletedEventArgs>
(ups_GetUserProfileByNameCompleted);
using (OperationContextScope scope = new
OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
request.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.UserName + ":" +
AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.
OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, request);
28
Debug.WriteLine("Getting User Profile for: {0}", person.AccountName);
//Call the method
ups.GetUserProfileByNameAsync(person.AccountName, person);
}
}
Quando viene chiamato il gestore eventi GetUserProfileByNameCompleted, gli eventuali valori di proprietà restituiti vengono esaminati e assegnati alla proprietà appropriata in PersonViewModel.
private void ups_GetUserProfileByNameCompleted(object sender,
GetUserProfileByNameCompletedEventArgs e)
{
if (e.Error == null)
{
Debug.WriteLine("Got the user profile for {0}",
((PersonViewModel)e.UserState).AccountName);
foreach (UserProfileService.PropertyData propertyData in e.Result)
{
switch (propertyData.Name)
{
case "AboutMe":
((PersonViewModel) e.UserState).AboutMe = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string): String.Empty;
break;
case "WorkPhone":
((PersonViewModel)e.UserState).WorkPhone = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string) : String.Empty;
break;
case "CellPhone":
((PersonViewModel)e.UserState).MobilePhone = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string) : String.Empty;
break;
case "PictureURL":
29
((PersonViewModel)e.UserState).PictureUrl = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string) : String.Empty;
break;
}
}
}
else
{
Debug.WriteLine(e.Error.Message);
}
}
Nota: l'utilizzo del controllo messaggi in questo esempio è consigliato soltanto in un ambiente in cui sono
stati installati gli ultimi aggiornamenti Silverlight. Per ulteriori informazioni, vedere Soluzioni per l'accesso ad
alcuni servizi ASMX da Silverlight 4 (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkID=216134) e GUID del servizio profili utente di SharePoint e Silverlight
(le informazioni potrebbero essere in lingua inglese) (http://go.microsoft.com/fwlink/?LinkId=216136).
Test
Test dell'applicazione nell'emulatore L'applicazione di questo esempio viene testata nell'emulatore di sviluppo di Windows Phone 7. L'emulatore
utilizza la connessione di rete del computer di sviluppo host. Se necessario, è possibile aggiungere voci del file degli
host al computer di sviluppo in modo che l'emulatore possa risolvere gli indirizzi del server UAG di sviluppo.
Test dell'applicazione in un dispositivo Per il test dell'applicazione in un dispositivo Windows Phone fisico, è necessario che il telefono abbia accesso
a una connessione Wi-Fi disponibile pubblicamente che fornisce il DNS e il routing al server UAG di testing di
destinazione o a un server UAG di testing esposto a Internet.
Considerazioni sul marketplace Dopo aver sviluppato l'applicazione per Windows Phone 7, è importante intraprendere le misure appropriate
per pubblicarla in modo sicuro su Windows Phone Marketplace. Microsoft ha già attivato diversi meccanismi
per evitare il rischio di pirateria per le applicazioni per Windows Phone 7. Per ulteriori informazioni su queste
misure, vedere il White paper Modello contro la pirateria in Windows Phone Marketplace (le informazioni
potrebbero essere in lingua inglese) (http://go.microsoft.com/fwlink/?LinkId=216137).
30
A livello generale, il numero minimo di operazioni da eseguire per pubblicare un'applicazione per Windows
Phone 7 in Windows Phone Marketplace prevede la creazione di un account di sviluppatore e la
pubblicazione dell'applicazione nel marketplace. Nell'articolo Procedura dettagliata per la registrazione di
uno sviluppatore in App Hub (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=216138) viene illustrato come registrare un account di sviluppatore.
È importante osservare come un account di sviluppatore possa essere associato a una persona o a una
società. È possibile pertanto iscriversi per un account in base alle proprie esigenze. La tariffa applicata per la
registrazione è la stessa per entrambi i tipi di account. Nell'articolo Procedura dettagliata per l'invio
dell'applicazione per Windows Phone 7 (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=216139) viene illustrato come inviare la propria applicazione per la
verifica e la pubblicazione. Se l'applicazione è conforme ai Requisiti di certificazione per le applicazioni per
Windows Phone 7 [PDF] (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/?linkid=9730558), verrà pubblicata in Windows Phone Marketplace.
Al momento della pubblicazione di questo documento, non è disponibile un «marketplace privato» che
consenta alle organizzazioni di evitare la distribuzione pubblica delle proprie applicazioni. Per aggiornamenti
e informazioni sulla possibilità per le organizzazioni di pubblicare le applicazioni privatamente, vedere il sito
App Hub (http://create.msdn.com (le informazioni potrebbero essere in lingua inglese)).
Nonostante le numerose misure di sicurezza definite da Microsoft, è comunque consigliabile applicare
ulteriori misure precauzionali per proteggere il codice qualora qualcuno ottenga una copia del file con
estensione xap che rappresenta l'applicazione per Windows Phone 7. Prima di eseguire i passaggi per la
pubblicazione dell'applicazione in Windows Phone Marketplace, è consigliabile offuscare le applicazioni per
proteggere la proprietà intellettuale. Sono disponibili diversi strumenti per l'offuscamento di applicazioni per
Windows Phone 7.
Sebbene questo non sia un elenco completo, rappresenta comunque un buon punto di partenza per
esplorare le opzioni attualmente disponibili.
Dotfuscator Windows Phone Edition di PreEmptive Solutions (le informazioni potrebbero essere in lingua
inglese) (http://www.preemptive.com/windowsphone7.html)
SmartAssembly 6 EAP di RedGate (le informazioni potrebbero essere in lingua inglese) (http://www.red-
gate.com/MessageBoard/viewforum.php?f=116)
DeepSea Obfuscator (le informazioni potrebbero essere in lingua inglese)
(http://www.deepseaobfuscator.com/)
L'offuscamento è un processo iterativo il cui testing e la cui verifica richiedono tempo. Nel piano di progetto è
necessario pertanto prevedere il tempo per l'offuscamento delle applicazioni per Windows Phone 7, il test di
tali applicazioni e la verifica dell'idoneità del livello di offuscamento alle proprie esigenze.
È possibile utilizzare lo strumento Distribuzione di applicazioni di Windows Phone 7 (figura 7) per testare le
applicazioni per Windows Phone 7 offuscate. Questo strumento consente di distribuire le applicazioni per
31
Windows Phone 7 offuscate in un dispositivo Windows Phone 7 registrato con il proprio account di
sviluppatore oppure nell'emulatore di Windows Phone 7.
Figura 7. Strumento Distribuzione di applicazioni di Windows Phone 7
Dopo aver distribuito e testato un'applicazione per Windows Phone 7 offuscata, è possibile che con livelli
elevati di offuscamento (attivazione di tutte le opzioni possibili per la protezione del codice) l'applicazione
non venga eseguita correttamente in un dispositivo Windows Phone 7 o nell'emulatore di Windows Phone 7.
Utilizzando invece un livello minimo di impostazioni di offuscamento è possibile che l'applicazione funzioni
correttamente, ma che non vengano soddisfatte le proprie esigenze di sicurezza.
Per determinare il livello di offuscamento impostato nell'applicazione da uno strumento di offuscamento, è
possibile eseguire le operazioni seguenti. Individuare innanzitutto il file con estensione xap che rappresenta
l'applicazione per Windows Phone 7 e rinominarlo con un'estensione cab o zip. Aprire quindi il file di archivio
ed estrarne il contenuto. Utilizzare quindi uno strumento come RedGate .NET Reflector per aprire l'assembly
32
che corrisponde all'applicazione. Aprendo il nodo Resources è possibile visualizzare tutti i file XAML e salvarli
sul disco rigido (figura 8).
Figura 8. Salvataggio dei file XAML con .NET Reflector
È quindi possibile esaminare i file XAML per verificare il livello di offuscamento applicato al codice. È
sorprendente osservare come un livello ridotto di offuscamento non modifichi il contenuto di un file XAML e un
livello elevato comporti semplicemente la rimozione degli spazi vuoti. Questo incoraggia a utilizzare il modello
Model View View Model per separare il codice e la logica di presentazione dai livelli di accesso ai dati.
È inoltre possibile esaminare il codice negli assembly su cu si basa l'applicazione per Windows Phone 7. Nella
figura 9 viene mostrato un assembly offuscato.
33
Figura 9. Offuscamento applicato a un assembly di un'applicazione per Windows Phone 7
È importante tuttavia tenere conto che nessun livello di offuscamento può impedire a un hacker molto
determinato di decompilare la maggior parte del codice sorgente. Le tecniche di offuscamento sono
progettate per proteggere la proprietà intellettuale applicando una barriera che rende molto difficile
decompilare il codice per appropriarsene.
Conclusioni Sono disponibili numerose risorse per gli sviluppatori Windows Phone 7. Per iniziare è consigliabile visitare il
sito App Hub in MSDN (le informazioni potrebbero essere in lingua inglese), http://create.msdn.com (le
informazioni potrebbero essere in lingua inglese). Gli articoli, i blog e i forum offrono assistenza agli sviluppatori
partendo da scenari di sviluppo per principianti fino a scenari per sviluppatori esperti. Nei prodotti SharePoint
2010 è disponibile una vasta gamma di funzionalità per le organizzazioni che desiderano collaborare e
condividere conoscenze, esperienze e informazioni. Le applicazioni enterprise che si basano sulle funzionalità
dei dispositivi mobili e di SharePoint offrono un enorme vantaggio alle società, che in questo modo possono
gestire, amministrare e distribuire in modo efficiente soluzioni basate sulla piattaforma .NET.
34
Appendice - Installazione e configurazione di UAG per i prodotti SharePoint
2010 In questa sezione viene descritto come configurare le reti e come installare e configurare un server UAG per
pubblicare un sito di SharePoint per lo sviluppo con Windows Phone 7. Questi passaggi sono appropriati per
un ambiente di sviluppo. Per informazioni sulla distribuzione in un ambiente di produzione, vedere la Guida
alla pubblicazione in UAG (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkID=206256) in TechNet. Il server UAG richiederà almeno 4 GB di RAM
durante il processo di installazione. Per un ambiente dimostrativo, sono sufficienti 2 GB e l'avviso può essere
ignorato senza problemi.
1. Creare una macchina virtuale di SharePoint Server e una macchina virtuale di
UAG In questo esempio viene utilizzata la Macchina virtuale di dimostrazione e valutazione (RTM) 2010 per
Information Worker (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkID=189314) per la macchina virtuale di SharePoint Server. Per creare la
macchina virtuale del server UAG, installare Windows Server 2008 R2 in una nuova macchina virtuale,
installare tutti gli aggiornamenti utilizzando Windows Update ed eseguire le operazioni descritte di seguito.
Reti
Nel diagramma seguente vengono illustrate le connessioni tra il server in cui è in esecuzione SharePoint
Server, il server UAG e il computer di sviluppo per Windows Phone 7. Nella documentazione che segue viene
descritto come implementare questo scenario.
35
Windows 7 Development Machine Hyper-V Host Machine
UAG Server Virtual Machine
SharePoint Server Virtual Machine
Visual Studio 2010
.5 .180 .171
.180
.1.6
192.168.150.x – Internal Network | 192.168.1.x – External Network
2. Configurare reti virtuali per il computer host Hyper-V Nel computer host Hyper-V creare due reti virtuali come indicato di seguito. Con la configurazione di due reti
viene simulato un ambiente di rete perimetrale in cui il server UAG interagisce con Internet su una scheda di
rete e con le risorse interne, in questo caso il server con SharePoint Server, su un'altra scheda di rete.
Nome Tipo di connessione Descrizione
Interna Solo interna. Connessione tra il server UAG e il server in
cui è in esecuzione SharePoint Server.
Esterna
UAG
Esterna - Associata alla scheda di rete nel
computer host Hyper-V.
Connessione tra il computer di sviluppo
per Windows Phone 7 e il server UAG.
Nota: è possibile che nell'ambiente in uso gli indirizzi IP siano leggermente diversi. È importante comunque
che la rete interna funzioni su una subnet diversa rispetto alla rete esterna.
Definire le impostazioni TCP/IP per la scheda di rete interna nel computer host Hyper-V come indicato di
seguito.
36
Definire le impostazioni TCP/IP per la scheda di rete esterna nel computer host Hyper-V come indicato di
seguito.
3. Configurare reti di macchine virtuali Hyper-V
37
Aggiungere un'altra scheda di rete nella macchina virtuale del server UAG e configurare la macchina virtuale
per l'utilizzo della rete virtuale interna e della rete virtuale esterna UAG in Hyper-V.
Aggiungere un'altra scheda di rete nella macchina virtuale di SharePoint Server e configurare la macchina
virtuale per l'utilizzo della rete virtuale interna e della rete virtuale esterna UAG in Hyper-V.
38
Definire le impostazioni TCP/IP per la scheda di rete interna nella macchina virtuale del server UAG come
indicato di seguito.
Definire le impostazioni TCP/IP per la scheda di rete esterna nella macchina virtuale del server UAG come
indicato di seguito.
39
Definire le impostazioni TCP/IP per la scheda di rete interna nella macchina virtuale di SharePoint Server
come indicato di seguito.
Definire le impostazioni TCP/IP per la scheda di rete esterna nella macchina virtuale di SharePoint Server
come indicato di seguito.
40
4. Preparare la macchina virtuale del server UAG per l'installazione di UAG Accedere alla macchina virtuale del server UAG. Rinominarla UAG1, accedere al dominio contoso.com e
riavviare il sistema. Nota: Se non si utilizza la macchina virtuale di dimostrazione e valutazione (RTM) 2010
per Information Worker (vedere http://go.microsoft.com/fwlink/?LinkID=189314), accedere al server UAG
nello stesso dominio del server in cui è in esecuzione SharePoint Server. Verificare che la macchina virtuale di
dimostrazione e valutazione (RTM) 2010 per Information Worker sia in esecuzione.
Utilizzare le credenziali seguenti per accedere alla macchina virtuale del server UAG nel dominio contoso.
Nome utente: contoso\administrator
Password: pass@word1
41
Riavviare il sistema e accedere utilizzando le credenziali contoso\administrator oppure le credenziali
specifiche dell'ambiente in uso.
5. Creare uno snapshot della macchina virtuale del server UAG Arrestare la macchina virtuale del server UAG e creare uno snapshot nella console di gestione di Hyper-V.
6. Installare il server UAG Montare innanzitutto il supporto di installazione di UAG nella macchina virtuale del server UAG. Avviare
quindi la macchina virtuale del server UAG e accedere utilizzando le credenziali contoso\administrator. Dopo
aver eseguito l'accesso, verificare che siano state utilizzate le credenziali di amministratore di contoso. Aprire
una finestra del prompt dei comandi, digitare whoami e quindi premere INVIO per verificare le credenziali.
Avviare infine l'installazione di UAG dal supporto di installazione. Per ulteriori informazioni sull'installazione,
vedere Installazione del Service Pack 1 di Forefront UAG 2010 (le informazioni potrebbero essere in lingua
inglese) (http://go.microsoft.com/fwlink/?LinkId=216130) in TechNet. Nota: non è possibile installare UAG
durante una sessione remota. L'installazione deve essere eseguita dalla console.
42
Fare clic su Install Forefront UAG. In uno scenario di sviluppo è possibile eseguire la macchina virtuale del
server UAG con meno di 4 GB di RAM. Se sono stati allocati meno di 4 GB di RAM per la macchina virtuale del
server UAG, fare clic su Continue.
46
A questo punto inizia l'installazione. Vengono installati tutti i ruoli e tutte le funzionalità da cui dipende UAG
e viene configurato il server per UAG.
47
Nella pagina Setup Wizard Completed fare clic su Finish.
7. Creare uno snapshot della macchina virtuale del server UAG Dopo il riavvio della macchina virtuale del server UAG e il completamento dell'installazione di UAG, arrestare
la macchina virtuale e creare uno snapshot nella console di gestione di Hyper-V.
48
8. Configurazione e attivazione iniziali del server UAG Avviare la macchina virtuale del server UAG e accedere utilizzando le credenziali contoso\administrator.
Dopo aver eseguito l'accesso, verificare che siano state utilizzate le credenziali di amministratore di contoso.
Aprire una finestra del prompt dei comandi, digitare whoami e quindi premere INVIO per verificare le
credenziali.
Per avviare la configurazione guidata di UAG, fare clic su Start | Tutti i programmi |Microsoft Forefront UAG
| Forefront UAG Management.
Fare clic su Configure Network Settings.
50
Selezionare le impostazioni delle schede di rete come illustrato nella cattura di schermata sopra riportata e
quindi fare clic su Next.
58
Fare clic su Yes o No, a seconda che si desideri o meno partecipare al programma Analisi utilizzo software,
quindi fare clic su Next.
62
Fare clic su Finish.
L'attivazione guidata è stata completata, ma è possibile che la configurazione di UAG non sia ancora
completamente attivata. Per effettuare una verifica, attivare i messaggi informativi nella finestra di
messaggio.
Scegliere Filter Messages dal menu Messages.
Selezionare la casella di controllo Informational messages.
Fare clic su OK.
63
Attendere che nella finestra di messaggio venga visualizzato il messaggio Activation completed successfully.
9. Creare il trunk HTTP per la pubblicazione del sito di SharePoint In questo scenario viene utilizzato un trunk HTTP ai fini dello sviluppo. L'utilizzo di un trunk HTTP anziché
HTTPS consente di velocizzare la configurazione eliminando i passaggi di configurazione dei certificati di
sicurezza per l'abilitazione di Secure Sockets Layer (SSL). In un ambiente di sviluppo è inoltre più semplice
utilizzare HTTP, poiché in questo modo non è necessario ricreare i certificati temporanei ogni due settimane.
In un ambiente di testing e in un ambiente di produzione è consigliabile invece utilizzare un trunk HTTPS per
proteggere le comunicazioni tra i dispositivi mobili e il server UAG. Per informazioni sulle topologie
maggiormente utilizzate per la distribuzione di server con prodotti SharePoint 2010 tramite UAG, vedere
Topologie di pubblicazione di SharePoint (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=216131) in TechNet.
Per creare il trunk HTTP, fare clic con il pulsante destro del mouse su HTTP Connections e quindi scegliere
New Trunk.
Fare clic su Next.
64
Nel passaggio 1 della procedura guidata Create Trunk Wizard fare clic su Portal Trunk e quindi su Next.
65
Nel passaggio 2 della procedura guidata immettere ContosoMobile nella casella di testo Trunk name. Questo
nome non è un URL percorribile e rappresenta invece un nome descrittivo identificabile del trunk HTTP.
Nella casella di testo Public Host Name immettere portal.contoso.com. Questo valore espone un endpoint al
trunk HTTP utilizzato da UAG per creare un ambiente portale singolo che pubblica tutte le applicazioni in una
singola pagina, ad esempio il sito di SharePoint.
Selezionare l'indirizzo IP che corrisponde all'indirizzo IP della rete esterna della macchina virtuale del server
UAG.
66
Fare clic su Next.
Nel passaggio 3 della procedura guidata Create Trunk Wizard fare clic su Add per aprire la finestra di dialogo
che consente di aggiungere il server di autenticazione al trunk.
Fare clic su Add.
67
Nell'elenco a discesa Server type selezionare Active Directory.
Nella casella di testo Server name immettere demo2010a.contoso.com. Questo è il nome di dominio
completo (FQDN, Fully Qualified Domain Name) del controller di dominio in esecuzione nella macchina
virtuale SP2010-7a.
Nella sezione Connection settings fare clic su Define domain controllers.
Nella sezione Connection settings fare clic su Define.
Nella finestra di dialogo Domain Controllers immettere l'indirizzo IP interno del controller di dominio. Nella
macchina virtuale SP2010-7a questo indirizzo IP è 192.168.150.1.
Fare clic su OK.
Nella sezione Search settings fare clic sul pulsante … accanto a Base DN.
Nell'elenco a discesa Select Base DN della finestra di dialogo Search Root selezionare
CN=Users,DC=contoso,DC=com.
Fare clic su OK.
Selezionare la casella di controllo Include subfolders.
Impostare Level of nested groups su 0.
Nella casella di testo User (domain\user) della sezione Server access immettere contoso\administrator.
Nella casella di testo password immettere pass@word1.
69
Selezionare il server demo2010a.contoso.com e quindi fare clic su Select.
Fare clic su User provides credentials for each selected serve. In un ambiente a server singolo come questo è
possibile selezionare User selects from a server list.
Selezionare la casella di controllo Use the same user name.
Fare clic su Next.
70
Fare clic su Use Forefront UAG access policies.
Ai fini dello sviluppo sono sufficienti i criteri di accesso predefiniti di Forefront UAG. In un ambiente di
produzione è possibile modificare questi criteri applicando una configurazione specifica dell'ambiente in uso.
Fare clic su Next.
71
Ai fini dello sviluppo sono sufficienti i criteri degli endpoint predefiniti di Forefront. In un ambiente di
produzione è possibile modificare questi criteri applicando una configurazione specifica dell'ambiente in uso.
Fare clic su Next.
72
Nell'ultima pagina della procedura guidata Create Trunk Wizard viene visualizzato un riepilogo della
configurazione del trunk.
Fare clic su Finish per finalizzare la configurazione del trunk.
73
10. Creare l'applicazione di SharePoint Nella sezione Applications della console di gestione di Forefront UAG fare clic su Add.
Nella procedura guidata Add Application Wizard fare clic su Next.
Nel passaggio 2 della procedura guidata fare clic su Web.
Nell'elenco a discesa Web selezionare Microsoft SharePoint Server 2010.
74
Fare clic su Next >.
Nella casella di testo Application name immettere Contoso Intranet.
Questo è un nome descrittivo dell'applicazione che viene pubblicata con il server UAG. Questo nome verrà
visualizzato nella home page del portale di UAG.
76
Fare clic su Next.
Ai fini dello sviluppo sono sufficienti i criteri degli endpoint predefiniti di Forefront. In un ambiente di
produzione è possibile modificare questi criteri applicando una configurazione specifica dell'ambiente in uso.
77
Fare clic su Configure an application server.
Fare clic su Next.
Lasciare Address type impostato su IP/Host.
Nell'elenco Addresses immettere il nome host o l'indirizzo IP interno del server in cui è in esecuzione
SharePoint Server 2010, ovvero 192.168.150.1. A seconda dell'ambiente, è anche possibile scegliere di
utilizzare il nome FQDN del server in cui è in esecuzione SharePoint Server oppure l'indirizzo IP dell'hardware
di bilanciamento del carico.
Nell'elenco Paths lasciare la voce predefinita «/», che indica che l'applicazione di SharePoint viene pubblicata
al livello radice.
Fare clic su Http port e immettere 80 nella casella.
Come indicato precedentemente, l'utilizzo di una porta HTTP anziché HTTPS semplifica l'impostazione e la
configurazione dell'ambiente di sviluppo. In un ambiente di produzione è consigliabile utilizzare una porta
HTTPS per crittografare le credenziali scambiate tra i computer client e il server UAG.
78
Nella casella di testo Public host name immettere spwp7intranet. Questo è l'URL del mapping di accesso
alternativo nel server in cui è in esecuzione SharePoint che corrisponde alla raccolta siti che si sta
pubblicando.
Questo valore è l'URL che verrà utilizzato dal server UAG per pubblicare l'applicazione nei computer client.
Quando si accede alla raccolta siti intranet.contoso.com tramite i client del server UAG, utilizzare l'URL
http://spwp7intranet.contoso.com. Il server UAG instraderà quindi la richiesta a SharePoint come
http://spwp7intranet.contoso.com dopo l'autenticazione dell'utente. Il mapping di accesso alternativo di
SharePoint (da configurare negli ultimi passaggi) eseguirà il mapping della richiesta a
http://intranet.contoso.com.
Fare clic su Next.
79
Selezionare la casella di controllo Use SSO.
Fare clic su Add.
Nella finestra di dialogo Authentication and Authorization Server selezionare demo2010a.contoso.com.
Fare clic su Select.
Nella sezione Select client authentication method fare clic su Both.
Selezionare la casella di controllo Allow rich clients to bypass trunk authentication.
Selezionare la casella di controllo Use Office Forms Based Authentication for Office client applications.
80
Fare clic su Next.
Fare clic su Yes.
Nella finestra di dialogo Portal Link selezionare la casella di controllo Open in a new window. Poiché
l'applicazione per Windows Phone 7 accede direttamente alle API di SharePoint, il collegamento al portale è
facoltativo, ma è un utile strumento per la risoluzione dei problemi.
82
Selezionare la casella di controllo Authorize all users.
In un ambiente di sviluppo la concessione a tutti gli utenti dell'accesso alla raccolta siti di SharePoint
pubblicata garantisce la massima flessibilità per il test. In un ambiente di produzione concedere l'accesso solo
agli utenti e ai gruppi specifici autorizzati ad accedere alla raccolta siti di SharePoint.
Fare clic su Next.
84
11. Configurare l'applicazione di SharePoint Nella sezione Applications della console di gestione di Forefront UAG selezionare Contoso Intranet e quindi
fare clic su Edit.
85
Nella scheda Portal Link selezionare le caselle di controllo Computer portal, Premium mobile portal e Non-
premium mobile portal.
Fare clic su OK.
12. Attivare la configurazione Sulla barra degli strumenti della console di gestione di Forefront UAG fare clic sul pulsante Activate.
Verrà visualizzata la finestra di dialogo Activate Configuration.
86
Fare clic su Activate.
La nuova configurazione verrà attivata nel server UAG.
Fare clic su Finish.
Attendere che nella finestra di messaggio nella parte inferiore della console di amministrazione di Microsoft
Forefront UAG venga visualizzato il messaggio Activation completed successfully. Benché nella finestra di
dialogo Activation Configuration sia stato indicato che la configurazione è stata eseguita, l'operazione viene
effettivamente conclusa solo dopo la visualizzazione del messaggio nella finestra di messaggio.
13. Configurare e verificare i mapping di accesso alternativo di SharePoint
87
È necessario configurare SharePoint in modo che risponda alle richieste per
http://spwp7intranet.contoso.com ed esegua il mapping delle richieste a http://intranet.contoso.com.
1. In Amministrazione centrale SharePoint 2010 passare alla sezione Gestione applicazioni e
selezionare Gestisci applicazioni Web.
2. Selezionare Intranet e fare clic su Estendi (Estendi applicazione Web) sulla barra multifunzione.
3. Nella finestra di dialogo Estendi applicazione Web in un altro sito Web IIS immettere le impostazioni
seguenti:
Nome: SharePoint - spwp7intranet.contoso.com - 80
Porta: 80
Intestazione host: spwp7intranet.contoso.com
Area: Intranet
4. Fare clic su OK.
5. Verificare le impostazioni passando a Gestione applicazioni | Applicazioni Web | Configura mapping
di accesso alternativo.
6. Selezionare l'impostazione di Insieme di mapping di accesso alternativo per la rete Intranet. Verrà
visualizzata la nuova voce per http://spwp7intranet.com
14. Aggiungere voci dei file degli host all'ambiente di sviluppo In questo scenario vengono utilizzate voci dei file degli host per risolvere il server UAG e il server in cui è in
esecuzione SharePoint. È possibile utilizzare anche voci DNS, ma i file degli host rappresentano una soluzione
accettabile in un ambiente di sviluppo. In un ambiente di produzione è consigliabile invece utilizzare voci DNS
per la risoluzione dei nomi.
Nel computer in cui è in esecuzione l'emulatore di Windows Phone 7 aggiungere una voce al file degli host
per puntare al nome e all'indirizzo IP dell'host pubblico associati all'applicazione del portale Intranet di
Contoso nel server UAG. Il file degli host è contenuto in c:\windows\system32\drivers\etc.
192.168.1.171 spwp7intranet.contoso.com
Facoltativamente, è possibile aggiungere una voce alla home page del portale di UAG.
192.168.1.171 portal.contoso.com
88
15. Testare la configurazione Nel computer in cui è in esecuzione l'emulatore di Windows Phone 7 chiudere tutti i Web browser per
verificare che la voce del file degli host venga riconosciuta. Aprire quindi Internet Explorer e accedere a
http://spwp7intranet.contoso.com.
Verrà visualizzata la pagina Application and Network Access Portal del server UAG.
Scaricare e installare il controllo ActiveX.
Fare clic su Installa.
89
Fare clic su Yes.
Selezionare la casella di controllo Trust this site e quindi fare clic su Trust.
90
Immettere le credenziali di un utente che ha accesso al sito di SharePoint pubblicato e quindi fare clic su Log On.
Il sito di SharePoint verrà visualizzato nel Web browser. A questo punto è possibile accedere al sito di
SharePoint pubblicato tramite UAG da un dispositivo mobile, ad esempio un dispositivo Windows Phone 7.
91
Facoltativamente, è possibile testare l'accesso alla pagina del portale di UAG immettendo l'URL del portale
http://portal.contoso.com in un browser.
92
UAG presenta inoltre una pagina Premium Mobile Portal a client come Windows Phone. Dal browser
dell'emulatore immettere l'URL del portale, http://portal.contoso.com. L'utente verrà reindirizzato alla
pagina di accesso:
Immettere le credenziali di Contoso, ad esempio Contoso\tonip e pass@word1. L'utente verrà reindirizzato al
portale del dispositivo mobile.
93
Selezionare il collegamento Contoso Intranet e verrà visualizzata la home page di SharePoint.
16. Testare il newsfeed RSS Quando i prodotti SharePoint 2010 vengono pubblicati tramite UAG, alcune delle pagine predefinite non
vengono analizzate correttamente. Svolge un ruolo fondamentale per questo documento la pagina
Activityfeed.aspx, che esegue il rendering del newsfeed consolidato. Testare la configurazione seguendo le
indicazioni riportate di seguito.
Activityfeed.aspx
94
Accedere alla pagina Newsfeed personale e scegliere di visualizzare il feed RSS.
Verrà visualizzato l'errore seguente.
Soluzione
Viene applicata alla pagina ActivityFeed.aspx la regola predefinita in base alla quale viene nascosta la
disconnessione. Per modificare la regola ed evitare che venga applicata, eseguire le operazioni seguenti:
Aprire il file di configurazione AppWrap appropriato in un editor di testo. I file sono contenuti nella directory
%Programmi%\Microsoft Forefront Unified Access Gateway\von\Conf\WizardDefaults\AppWrapTemplates.
Eseguire il backup del file AppWrap e modificarlo. Il file deve essere appropriato per il protocollo del portale:
HTTP_WhlFiltAppWrap_ForPortal per HTTP e HTTPS_WhlFiltAppWrap_ForPortal per HTTPS.
Individuare la riga:
<!-- for sharepoint 2010 conditional appwrap hide log off -->
95
<URL case_sensitive="false">.*\.aspx.*</URL>
Sostituirla con:
<!-- for sharepoint 2010 conditional appwrap hide log off changed to
exclude ActivityFeed.aspx -->
<URL case_sensitive="false">^.*(?<!(^|\\|/)(activityfeed))\.aspx.*</URL>
Salvare il file e attivare la nuova configurazione.
Tornare alla pagina Newsfeed personale e fare clic sul pulsante RSS. La pagina dovrebbe visualizzarsi
correttamente e gli URL dovrebbero essere riscritti in modo appropriato.
96
Risorse
Forefront Unified Access Gateway in TechNet http://go.microsoft.com/fwlink/?LinkId=216132&clcid=0x410 (le informazioni potrebbero essere in lingua
inglese)
Blog Closer to the Edge Autore: Jason Jones
Le modifiche della valutazione degli endpoint di Forefront UAG SP1 hanno effetto su dispositivi mobili come
iPad/iPhone (le informazioni potrebbero essere in lingua inglese)
(http://go.microsoft.com/fwlink/?LinkId=216133)
Blog del team dei servizi Web di Silverlight Soluzione per accedere ad alcuni servizi ASMX da Silverlight 4 (le informazioni potrebbero essere in lingua
inglese) (http://go.microsoft.com/fwlink/?LinkId=216134)
Informazioni sugli autori
Todd Baginski, MVP
Todd Baginski è un consulente indipendente che ha ottenuto cinque volte il titolo di MVP per
Microsoft SharePoint. Utilizza SharePoint, Silverlight, Office, Windows Phone 7 e le tecnologie
.NET per creare siti Web e soluzioni personalizzate per Information Worker. È autore di contenuti
e relatore per la sezione Servizi di integrazione applicativa del programma Microsoft Certified
Master (MCM) per SharePoint. È spesso oratore alle conferenze TechEd, SharePoint Connections
e Microsoft SharePoint. Scrive regolarmente articoli per la rivista SharePointPro Connections e
ha recentemente collaborato in qualità di technical editor alla pubblicazione del libro Professional
Business Connectivity Services in SharePoint 2010 di Scot Hillier e Brad Stevenson. Ha creato
inoltre il materiale didattico relativo a Microsoft Business Productivity Online Suite (BPOS) con le
versioni alfa e beta di SharePoint Online (SPO) 2010, nonché per una conferenza
post-TechReady 11 riservata solo a dipendenti Microsoft.
Todd Baginski è una persona molto attiva che ama trascorrere il tempo con la propria famiglia e
dedicarsi allo sci a ogni possibile occasione. Può essere contattato all'indirizzo di posta
elettronica [email protected].
Matthew McDermott, MVP
Matthew McDermott, MVP per Microsoft SharePoint Server, è un membro fondatore di Aptillon,
Inc. e consulente principale di AbleBlue ad Austin, Texas. AbleBlue è specializzata in consulenze
per l'integrazione, la definizione di strategie e l'implementazione di SharePoint. Matthew
McDermott è un autore ed è specializzato nelle tecnologie SharePoint relative alla gestione del
contenuto Web, alla collaborazione, alla ricerca e al social computing. Segue le implementazioni
di SharePoint per società Fortune 500 dal 2002. Nel suo blog (www.ableblue.com/blog (le
informazioni potrebbero essere in lingua inglese)) vengono trattati argomenti di interesse per
97
sviluppatori, professionisti IT e utenti finali. Può essere contattato all'indirizzo di posta
elettronica [email protected].
Dedica il suo tempo libero all'attività di addestratore di cani per K9 Search • Austin, una squadra
di ricerca K9 di volontari che collabora con l'FBI e i dipartimenti di polizia di Austin e San
Antonio. Cuoco e barman esperto, trascorre con la moglie il tempo libero dopo essersi dedicato
ai suoi cani.
Ben Ari
Ben Ari, Senior Security Engineer presso Microsoft, è specializzato in UAG e fornisce supporto
per il prodotto per clienti Premier e Professional di Microsoft in tutto il mondo. È anche un
giornalista e un blogger attivo e ha recentemente pubblicato il libro Microsoft Forefront UAG
2010 Administrator's Handbook (ISBN 978-1849681629). È possibile visitare il blog di Ben Ari
all'indirizzo http://blogs.technet.com/b/ben (le informazioni potrebbero essere in lingua
inglese).