Creazione di applicazioni per Windows Phone 7 con i...

97
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.

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.

43

Nella pagina Welcome della procedura guidata fare clic su Next >.

44

Fare clic su I accept the Licensing Terms for Microsoft Software e quindi su Next.

45

Nella pagina Select Installation Location fare clic su Next.

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.

49

Fare clic su Next.

50

Selezionare le impostazioni delle schede di rete come illustrato nella cattura di schermata sopra riportata e

quindi fare clic su Next.

51

Fare clic su Next.

52

Fare clic su Finish.

In questo passaggio viene configurato il server UAG come server singolo.

53

Fare clic su Define Server Topology.

Fare clic su Next.

54

Fare clic su Single Server e quindi su Next.

55

Fare clic su Finish.

Fare clic su Join Microsoft Update.

56

Fare clic su Next.

57

Fare clic su Use Microsoft Update when I check for updates (recommended) e quindi 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.

59

Fare clic su Finish.

60

Fare clic su Close.

Fare clic su Yes per attivare la configurazione.

61

Immettere una password e quindi fare clic su Next >.

Fare clic su Activate.

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.

68

Fare clic su OK.

Fare clic su Yes.

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.

75

Fare clic su Next.

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.

81

Fare clic su Next.

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.

83

Fare clic su Finish.

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).