Erstellen von Anwendungen für Windows Phone 7 mit SharePoint 2010-Produkten und Unified Access Gateway Dieses Dokument wird „wie besehen“ bereitgestellt. Die in diesem Dokument enthaltenen Informationen und Ansichten, einschließlich URLs und Verweise auf Internetwebsites, können ohne vorherige Ankündigung geändert werden. Das Risiko der Nutzung liegt bei Ihnen. Einige der hier beschriebenen Beispiele dienen ausschließlich der Veranschaulichung und sind rein fiktiv. Eventuelle Ähnlichkeiten mit realen Unternehmen, Organisationen, Produkten, Domänenamen, E-MailAdressen. Logos, Personen, Orten oder Ereignissen sind Zufall und unbeabsichtigt. Mit diesem Dokument werden keine Rechte an geistigem Eigentum an einem Microsoft-Produkt auf Sie übertragen. Sie sind berechtigt, dieses Dokument zu kopieren und für eigene interne Referenzzwecke zu nutzen. Sie sind berechtigt, dieses Dokument für eigene interne Referenzzwecke zu bearbeiten. Microsoft, SharePoint, Silverlight, Visual Studio und Windows Phone 7 sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. © 2011 Microsoft Corporation. Alle Rechte vorbehalten. Erstellen von Anwendungen für Windows Phone 7 mit SharePoint 2010-Produkten und Unified Access Gateway Dave Pae Microsoft Corporation Todd Baginski Aptillon, Inc. Matthew McDermott Aptillon, Inc. Ben Ari Microsoft Corporation März 2011 Gilt für: Microsoft® SharePoint® Server 2010, Microsoft SharePoint Foundation 2010, Microsoft Forefront Unified Access Gateway, Windows Phone 7™ Zusammenfassung: In diesem Whitepaper werden Geschäftsszenarien für die Entwicklung mobiler Anwendungen erörtert, die Features von SharePoint 2010-Produkten für die Zusammenarbeit verwenden und die Authentifizierung über Microsoft Forefront Unified Access Gateway (UAG) ausführen. Im Hauptteil des Dokuments werden die erforderlichen Konzepte und der Code erläutert, die für den sicheren Zugriff auf SharePoint-Listendaten von Windows Phone 7 erforderlich sind. Im Anhang werden die Installation und die Konfiguration einer Entwicklerinstanz von UAG für den Test und die Entwicklung von mobilen Anwendungen mit SharePoint 2010-Produkten veranschaulicht. 2 Inhalt Inhalt ...............................................................................................................................................................3 Übersicht und Ziele ............................................................................................................................................5 Architektur ........................................................................................................................................................6 SharePoint 2010-Produkte – Intranet .............................................................................................................6 UAG ...........................................................................................................................................................6 Intranet – Szenario für die Zusammenarbeit ..........................................................................................................6 Geschäftswert der Zusammenarbeit ...............................................................................................................7 Die Anwendung ...........................................................................................................................................7 Sicherheit........................................................................................................................................................ 12 Speicherung der Anmeldinformationen ......................................................................................................... 12 Authentifizierung ....................................................................................................................................... 13 SharePoint-Dienste........................................................................................................................................... 14 Verwenden von Diensten ............................................................................................................................ 14 Zugreifen auf SharePoint-Listendaten unter Verwendung der OData-Clientbibliothek .......................................... 14 Aktivitätsfeed – RSS ................................................................................................................................... 22 Benutzerprofildienst – Kollegen.................................................................................................................... 25 Benutzerprofildienst – Benutzerprofildaten .................................................................................................... 28 Tests .............................................................................................................................................................. 31 Testen der Anwendung im Emulator ............................................................................................................. 31 Testen der Anwendung auf einem Gerät ....................................................................................................... 31 Überlegungen für Marketplace ........................................................................................................................... 31 Schlussbemerkung ........................................................................................................................................... 35 Anhang – Installation und Konfiguration von UAG für SharePoint 2010-Produkte ...................................................... 36 1. Erstellen eines virtuellen Computers für SharePoint Server und einen virtuellen UAG-Computer ...................... 36 2. Einrichten von virtuellen Netzwerken für den Hyper-V-Hostcomputer ............................................................ 37 3. Einrichten von Netzwerken für den virtuellen Hyper-V-Computer.................................................................. 39 4. Vorbereiten des virtuellen Computers für den UAG-Server für die UAG-Installation ......................................... 42 5. Snapshot des virtuellen Computers für den UAG-Server .............................................................................. 43 6. Installieren des UAG-Servers ................................................................................................................... 43 7. Snapshot des virtuellen Computers für den UAG-Server .............................................................................. 49 8. Erstkonfiguration und Aktivierung des UAG-Servers ................................................................................... 49 9. Erstellen des HTTP-Trunks zum Veröffentlichen der SharePoint-Website ........................................................ 65 10. Erstellen der SharePoint-Anwendung ...................................................................................................... 75 11. Konfigurieren der SharePoint-Anwendung ................................................................................................ 86 12. Aktivieren der Konfiguration .................................................................................................................. 87 13. Konfigurieren und Überprüfen der alternativen SharePoint-Zugriffszuordnung .............................................. 89 3 14. Hinzufügen von Hostdateieinträgen zu der Entwicklungsumgebung ............................................................. 89 15. Testen der Konfiguration ....................................................................................................................... 90 16. Testen von Newsfeed RSS ..................................................................................................................... 96 Ressourcen...................................................................................................................................................... 98 Forefront Unified Access Gateway auf TechNet............................................................................................... 98 Blog „Closer to the Edge“ ............................................................................................................................ 98 Blog des Silverlight-Webdienstteams ............................................................................................................ 98 Informationen zu den Autoren ........................................................................................................................... 98 Todd Baginski, MVP .................................................................................................................................... 98 Matthew McDermott, MVP ........................................................................................................................... 98 Ben Ari ..................................................................................................................................................... 99 4 Übersicht und Ziele Während Unternehmen wachsen und sich verändern, um mit der Technologie Schritt zu halten, können sich die Mitarbeiter von der Gemeinschaft des Unternehmens abgekoppelt fühlen. Microsoft® SharePoint 2010Produkte unterstützen zahlreiche Features, die das Engagement und die Zusammenarbeit der Mitarbeiter unterstützen – von Listen und Bibliotheken, die Dokumente und Informationen speichern und verwalten, über zentralisierte Benutzerprofile, die es Mitarbeitern ermöglichen, sich selbst und ihre Rolle im Unternehmen vorzustellen, bis zu Kennzeichnungen und Notizen, die das Auffinden von Informationen innerhalb und außerhalb der Firewall erleichtern. Windows Phone 7™ ist die neueste Generation mobiler Geräte, die Microsofts Vision eines mobilen Arbeitsplatzes unterstützen. Windows Phone verfügt über zahlreiche Features, die „Office in der Cloud“ unterstützen, einschließlich Anwendungen, die Microsoft Office-Dokumente öffnen und lesen können. Die Windows Phone 7-Entwicklungsumgebung ist für .NETEntwickler zugeschnitten, die bereits über solide Kenntnisse in der Entwicklung für .NET und Microsoft Silverlight® verfügen. Dieses Whitepaper versucht, die Diskrepanz zwischen Windows Phone-Entwicklern und SharePoint-Entwicklern zu überbrücken, die Geschäftsanwendungen erstellen möchten, die sich die Leistungsfähigkeit von SharePoint 2010-Produkten von Windows Phone zunutze machen. Hinweis: Wenn nicht anders angegeben, bezieht sich SharePoint 2010-Produkte in diesem Whitepaper auf Microsoft SharePoint® Server 2010 und Microsoft SharePoint Foundation 2010. In den Beispielen und Szenarien wird SharePoint Server 2010 verwendet. In diesem Dokument sollen die folgenden Entwicklungsszenarien verdeutlicht werden: Wie bereite ich die Verbindung zu SharePoint 2010-Produkten von meinen Windows Phone 7-Anwendungen vor? Wie stelle ich eine Verbindung zu SharePoint über Unified Access Gateway her? Wie stelle ich eine Verbindung zu SharePoint-Webdiensten her, und wie authentifiziere und nutze ich diese? Wie erstelle und aktualisiere ich SharePoint-Listenelemente? Wie nutze ich von SharePoint bereitgestellte RSS-Feeds? 5 Architektur In dem in diesem Whitepaper dargestellten Szenario ermöglicht es Contoso seinen Mitarbeitern, eine Verbindung zu SharePoint 2010-Produkten über Forefront Unified Access Gateway (UAG) herzustellen. UAG übersetzt den auf dem Telefon konfigurierten externen Hostnamen in den in SharePoint konfigurierten internen Hostnamen und fügt eine Sicherheits- und Authentifizierungsschicht hinzu, die von Unternehmen zum Schutz und zum Steuern ihrer Webressourcen benötigt wird. SharePoint 2010-Produkte – Intranet Das Contoso-Intranet ist eine Unternehmensimplementierung von SharePoint 2010-Produkten. Die Website ist unter Verwendung einer Benutzerprofildienst-Anwendung und einer Suchdienstanwendung konfiguriert. Die mobile Anwendung verwendet den Webdienst des Benutzerprofildiensts, damit Mitarbeiter Benutzerprofilinformationen auf ihren Mobiltelefonen anzeigen können. Weitere Informationen zum Konfigurieren der Benutzerprofildienst-Anwendung finden Sie unter Verwalten des Benutzerprofildiensts (SharePoint Server 2010) (http://technet.microsoft.com/en-us/library/ee721050.aspx). UAG Für die Veröffentlichung einer SharePoint-Website über einen UAG-Server in einer Entwicklungsumgebung ist außer der Installation und Konfiguration des UAG-Servers die Einrichtung eines Netzwerks auf dem HyperV-Hostcomputer, auf dem Server, auf dem SharePoint Server 2010 ausgeführt wird und auf dem UAG-Server erforderlich. Im Anhang wird die Einrichtung dieser Netzwerke und die Installation und Konfiguration eines UAG-Servers für die Veröffentlichung einer SharePoint-Website für die Windows Phone 7-Entwicklung erläutert. Diese Schritte eignen sich für eine Entwicklungs- oder eine andere Nicht-Produktionsumgebung. Informationen zur Bereitstellung einer Umgebung wie dieser in einer Produktionsumgebung finden Sie im Lösungshandbuch für die SharePoint-Veröffentlichung (http://go.microsoft.com/fwlink/?LinkID=206256) auf der TechNet-Website. Intranet – Szenario für die Zusammenarbeit Contoso beschäftigt zahlreiche talentierte Mitarbeiter, die in vielen unterschiedlichen Bereichen der Produktion tätig sind, einschließlich Arzneimittel und Elektronik. Die Geschäftsleitung von Contoso ist von der Vision geleitet, Mitarbeiter und Software besser miteinander zu integrieren, damit der Arbeitsplatz nicht nur produktiver, sondern aus der Perspektive der Mitarbeiter auch besser verbunden ist. Contoso möchte für alle Mitarbeiter den Zugriff auf die Daten ermöglichen, um die Zufriedenheit und Produktivität der Belegschaft zu 6 erhöhen. Contoso besitzt eine gute Grundlage mit seiner Bereitstellung von SharePoint 2010-Produkten. Das Unternehmen betrachtet SharePoint als zentrale Unternehmensanwendung, die Benutzerdaten und Aktivitäten konsolidiert. Contoso möchte jedoch mehr und eine mobile Lösung für seine Mitarbeiter anbieten. Zu diesem Zweck möchte Contoso eine mobile Anwendung entwickeln, mit der Benutzer ihre Aktivitäten aus SharePoint anzeigen, die Aktivitäten ihrer Kollegen verfolgen und Listen aktualisieren können, die in ihrem SharePoint-Intranet gehostet werden. Geschäftswert der Zusammenarbeit Auch wenn es einige Unternehmen als Herausforderung betrachten, einen direkten Zusammenhang zwischen Geschäftswert und den Features für die Zusammenarbeit von SharePoint 2010-Produkten herzustellen, hat Contoso einen direkten Zusammenhang zwischen der Verbindung von Mitarbeitern und der Schaffung eines Gemeinschaftsgefühls mithilfe von SharePoint festgestellt. Umso mehr sich Mitarbeiter mit ihren Freunden am Arbeitsplatz verbunden fühlen, desto zufriedener sind sie an ihrem Arbeitsplatz. Die Zufriedenheit am Arbeitsplatz führt zu einer besseren Mitarbeiterbindung (und einer einfacheren Mitarbeiterrekrutierung). Eine bessere Mitarbeiterbindung verringert die Einstellungskosten und führt zu einem besseren Unternehmensertrag. Die Anwendung Mithilfe der mobilen Anwendung möchte Contoso zahlreiche der Features von „Meine Websites“ aus SharePoint in einem Webbrowser replizieren. Die Anwendung soll aus einer Panoramaseite mit Listenfeldern für „Zuletzt aufgerufene Personen“, „Mein Newsfeed“, „Meine Aktivitäten“ und „Meine Kollegen“ bestehen. Jedes Mal, wenn ein Benutzer das Bild eines anderen Benutzers auswählt, wird das Profil des ausgewählten Benutzers auf einer neuen Seite geöffnet. Suchergebnisse werden in einem Listenfeld dargestellt, und bei der Auswahl eines Benutzers wird dessen Profil angezeigt. Diese Komponenten werden in Abbildung 1 dargestellt. Abbildung 1: Die sozialen Funktionen von SharePoint, die Contoso in seiner Anwendung für Windows Phone 7 verwenden möchte 7 Persönliche Aufgabenliste Jede persönliche Website verfügt über eine Aufgabenliste, mit der Mitarbeiter den persönlichen Fortschritt von Aufgaben verfolgen kann. Die Anwendung stellt eine Verbindung zur Aufgabenliste der persönlichen Website her, sodass Mitarbeiter Aufgaben erstellen, aktualisieren und löschen können. Mein Newsfeed Unter „Mein Newsfeed“ (Abbildung 2) auf „Meine Website“ in SharePoint erhalten Benutzer die neuesten Nachrichten aus dem Unternehmen. Da „Mein Newsfeed“ erweiterbar ist, können Unternehmen wie Contoso weitere Kanäle für Aktivitäten aus anderen Systemen hinzufügen. Abbildung 2: „Mein Newsfeed“ auf einer SharePoint-Website, wie sie in einem Webbrowser angezeigt wird 8 Meine Kollegen Diese von den Benutzern gepflegte Liste von Kollegen („die Personen, denen ich folge“) ist eine wertvolle Ressource (Abbildung 3). Contoso möchte diese Liste für die mobile Nutzung duplizieren. Abbildung 3: „Meine Kollegen“ auf einer SharePoint-Website, wie sie in einem Webbrowser angezeigt wird 9 Die Windows Phone-Anwendung verwendet das Panorama-Steuerelement, um die Informationen in einem fortlaufenden Bereich anzuzeigen, einschließlich vor kurzem aufgerufene Profile. (Abbildung 4) Abbildung 4: Das Panorama-Steuerelement, das die gesamte Ansicht der Anwendung für Windows Phone 7 anzeigt. 10 Profilkarte Durch die Auswahl eines Benutzers werden Details aus dem Profil dieses Benutzers angezeigt (Abbildung 5). Die Profilkarte zeigt Informationen zu dem Benutzer in der mobilen Ansicht an. Abbildung 5: Details zu einem Benutzer auf einer SharePoint-Website, wie sie in einem Webbrowser angezeigt werden 11 Abbildung 6: Details zu einem Benutzer auf einer SharePoint-Website, wie sie in der Anwendung für Windows Phone 7 angezeigt werden Sicherheit Die Sicherheit muss von dem Windows Phone-Entwickler sowohl für übertragene als auch für ruhende Daten beachtet werden. Die sichere Speicherung der Anmeldeinformationen wird durch Verschlüsselung und isolierte Speicherung erreicht. Weitere Informationen zu den Sicherheitsfunktionen des Telefons finden Sie unter Sicherheit für Windows Phone (http://go.microsoft.com/fwlink/?LinkId=215977) auf MSDN. Speicherung der Anmeldinformationen Windows Phone 7 unterstützt die folgenden kryptografischen Algorithmen: AES HMACSHA1 HMACSHA256 Rfc2898DeriveBytes SHA1 SHA256 Es ist von größter Wichtigkeit, dass Entwickler von mobilen Anwendungen, die Anmeldinformationen auf dem Telefon speichern, die Sicherheit der gespeicherten Anmeldinformationen für den Fall erwägen, dass das Gerät verloren geht oder manipuliert wird. 12 Authentifizierung Windows Phone 7 unterstützt nicht die NTLM-Authentifizierung. Webdienstanforderungen vom Telefon über UAG müssen den ordnungsgemäßen Authentifizierungsheader erstellen, indem die Anmeldeinformationen aus dem verschlüsselten Speicher abgerufen und anschließen an den Header des HttpWebRequest-Objekts angefügt werden. Webanforderungen sollten über HTTPS und die übergebenen Authentifizierungsheader erfolgen, wie in dem folgenden Beispiel. upsRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String( Encoding.UTF8.GetBytes(AppSettings.Username + ":" + AppSettings.Password)) + System.Environment.NewLine; Wenn ein WCF-Dienstverweis verwendet wird, kann der Header dem SOAP-Client hinzugefügt werden, indem auf OperationContextScope zugegriffen wird, wie in dem folgenden Beispiel. 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); //Call the method ups.GetUserColleaguesAsync(account); } 13 SharePoint-Dienste Verwenden von Diensten Die Anwendung verwendet mehrere SharePoint-Dienste, um die Anforderungen des Unternehmens zu erfüllen. Diese werden in der folgenden Tabelle zusammengefasst. Anforderung Dienst-URL Methode Lesen und Aktualisieren von Listendaten http://sharepoint/_vti_bin/listdata.svc OData-Clientbibliothek Anzeigen des Benutzer-Newsfeeds http://mysitehost/_layouts/activityfeed.aspx?consolidate d=true Verwendung bereitgestellten Feeds Anzeigen der Kollegen des Benutzers http://mysitehost/_vti_bin/userprofileservice.asmx GetUserColleagues Anzeigen des Benutzerprofils http://mysitehost/_vti_bin/userprofileservice.asmx GetUserProfileByName des RSS- Zugreifen auf SharePoint-Listendaten unter Verwendung der OData-Clientbibliothek Die Veröffentlichung einer SharePoint-Websitesammlung über einen UAG-Server ermöglicht die Integration zwischen Anwendungen für Windows Phone 7 und den SharePoint-REST-APIs. Die OData-Clientbibliothek für die CTP-Version der Windows Phone 7-Serie (http://go.microsoft.com/fwlink/?LinkId=215984&clcid=0x407) ermöglicht Windows Phone 7-Geräten die Verwendung von OData-Feeds. Die SharePoint-REST-APIs können unter Verwendung der OData-Clientbibliothek aufgerufen werden, um Erstellungs-, Lese-, Aktualisierungs- und Löschvorgänge (Create, Read, Update und Delete, CRUD) für SharePoint-Listendaten auszuführen. Dies ermöglicht die Integration von Windows Phone 7-Geräten mit Anwendungen für die Zusammenarbeit, die auf der Grundlage der SharePoint-Plattform erstellt wurden. Das folgende Codebeispiel veranschaulicht die Verwendung der OData-Clientbibliothek und der SharePoint-REST-APIs, um CRUD-Vorgänge für SharePoint-Listendaten auszuführen. Da Sie keine Dienstverweise für die SharePoint-REST-APIs zu einer Windows Phone 7-Anwendung hinzufügen können, müssen Sie manuell eine Proxyklasse generieren und die Klasse dem Projekt in Microsoft Visual Studio® als Verweis hinzufügen. DataSvcUtil.exe (http://go.microsoft.com/fwlink/?LinkID=215987) wird zu Generierung der Proxyklasse verwendet. In diesem Szenario wird die Proxyklasse als ContosoIntranetDataContext bezeichnet. Diese Klasse wird sehr häufig in den folgenden Codebeispielen verwendet. 14 Die LoadTask-Methode veranschaulicht das Laden von Vorgängen aus einer SharePoint-Aufgabenliste. In dieser Methode verwendet die ContosoIntranetDataContext-Klasse Einstellungen von IsolatedStorage, um festzustellen, mit welcher SharePoint-Website eine Verbindung hergestellt werden soll. Der SendingRequest-Ereignishandler wird der Instanz der ContosoIntranetDataContext-Klasse zugewiesen. Dieser Ereignishandler wird ausgelöst, wenn die ContosoIntranetDataContext-Klasse eine Anforderung bei den SharePoint-REST-APIs aufruft. requestUri definiert den REST-Vorgang, und die BeginExecute-Methode übermittelt die Anforderung. Die BeginExecute-Methode registriert die asynchrone Rückrufmethode, die ausgelöst wird, wenn die Abfrage abgeschlossen ist. 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>( 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 15 context.BeginExecute<TasksItem>(requestUri, QueryCallback, null); }); } Der SendingRequest-Ereignishandler wird ausgelöst, wenn die OData-Abfrage an SharePoint 2010-Produkte gesendet wird. Der Code in diesem Ereignishandler ist wichtig: ohne diesen Code kann ein UAG-Server ein Windows Phone 7-Gerät nicht ordnungsgemäß identifizieren und nicht richtig zur Authentifizierung des Benutzers interagieren. Der Benutzer-Agent-Header veranlasst einen UAG-Server mit HTTP 401 anstatt mit 302 zu antworten. Der Autorisierungsheader enthält die verschlüsselten Anmeldeinformationen für den Benutzer, der auf den OData-Feed zugreift. Die verschlüsselten Anmeldeinformationen werden von dem UAG-Server verwendet, um den Benutzer zu authentifizieren. 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; } Nachdem die Abfrage bei dem Server, auf dem SharePoint Server ausgeführt wird, abgeschlossen ist, wird die QueryCallback-Methode ausgelöst. Diese Methode analysiert die von der Abfrage zurückgegebenen Ergebnisse, und fügt diese der an die Benutzeroberflächenelemente der Telefonanwendung gebundenen ObservableCollection-Liste hinzu. private void QueryCallback(IAsyncResult asyncResult) { IEnumerable<TasksItem> results; allTaskItems = new ObservableCollection<TasksItem>(); results = context.EndExecute<TasksItem>(asyncResult).ToList() as IEnumerable<TasksItem>; ObservableCollection<Task> returnedTasks = new ObservableCollection<Task>(); foreach (TasksItem tasksItem in results) { //Code omitted for brevity: Retrieve metadata about the task… 16 //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; //UI callback methods omitted for brevity } Die SaveTask-Methode erstellt neue Vorgänge und aktualisiert vorhandene Vorgänge. Der folgende Code veranschaulicht die Verwendung der OData-Clientbibliothek zur Erstellung neuer Vorgänge oder zur Aktualisierung vorhandener Aufgaben in einer SharePoint-Aufgabenliste von einem Windows Phone 7-Gerät. 17 Die TasksItem-Klasse stellt eine Aufgabe in einer Aufgabenliste dar. Eine TasksItem-Instanz wird erstellt, und ihre Eigenschaften werden auf die Werte des Formulars festgelegt, das zur Erstellung oder Bearbeitung der Aufgaben verwendet wurde. Anschließend wird die TasksItem-Instanz mit den bereits in das Telefon geladenen Aufgaben verglichen, um festzustellen, ob die Aufgabe bereits vorhanden ist. Anhand dieser Prüfung wird festgelegt, ob die OData-Clientbibliothek zur Erstellung einer neuen Aufgabe in der SharePoint-Aufgabenliste verwendet wird oder zur Aktualisierung einer vorhandenen. Die BeginSaveChanges-Methode ruft den richtigen Vorgang auf und registriert die saveChangesCallBack-Rückrufmethode. 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; tasksItem.StartDate = task.StartDate; tasksItem.DueDate = task.DueDate; //Set percent complete if (task.PercentComplete > 0) 18 { 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); } ); } 19 Nach dem Abschluss der Abfrage wird saveChangesCallBack ausgelöst. Diese Methode analysiert die von der Abfrage zurückgegebenen Ergebnisse, und aktualisiert die an die Benutzeroberflächenelemente des Telefons gebundene ObservableCollection-Liste. 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); } } 20 ); } Die DeleteTask-Methode veranschaulicht die Verwendung der OData-Clientbibliothek zum Löschen von Aufgaben in einer SharePoint-Aufgabenliste von einem Windows Phone 7-Gerät. Diese Methode verwendet die ID, die einer in der Windows Phone 7-Anwendung ausgewählten Aufgabe zugeordnete ist und erstellt ein auf der ID basierendes Task-Objekt. Das Task-Objekt wird verwendet, um die entsprechende TasksItem-Klasse in dem der SharePoint-Aufgabenliste zugeordneten OData-Clientbibliothekkontext zu ermitteln. Nachdem der entsprechende Eintrag gefunden wurde, wird er zum Löschen markiert. Die BeginSaveChanges-Rückrufmethode ruft die SharePoint-REST-API auf und registriert die DeleteCallback-Rückrufmethode. 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 context.BeginSaveChanges(DeleteCallback, context); break; 21 } } } Nach dem Abschluss der Abfrage wird die DeleteCallback-Methode ausgelöst. Diese Methode analysiert die von der Abfrage zurückgegebenen Ergebnisse, und entfernt die Aufgabe in der an die Benutzeroberflächenelemente des Telefons gebundenen ObservableCollection-Liste. 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(); } } ); } Aktivitätsfeed – RSS Der persönliche Newsfeed und aktuelle Aktivitäten werden von dem Host „Meine Website“ als RSS-Feed veröffentlicht. Die Anwendung muss lediglich den RSS-Feed anfordern, die Zeichenfolge herunterladen und die Ergebnisse einem Sammlungsobjekt hinzufügen. Die Aktivitäten werden von dem Host von „Meine Website“ unter der URL http://<Host_Meiner_Website>/_layouts/activityfeed.aspx?consolidated=true 22 veröffentlicht. (Stellen Sie sicher, dass Sie den RSS-Feed entsprechend den Anweisungen im Anhang am Ende dieses Dokuments getestet haben, bevor Sie versuchen, auf diesen über den folgenden Code zuzugreifen.) Die LoadNewsfeed-Methode veranschaulicht die Anforderung des konsolidierten Aktivitätsfeeds für den authentifizierten Benutzer über UAG. Eine neue HttpWebRequest-Klasse wird erstellt, indem die URI des konsolidierten Aktivitätsfeeds übergeben wird. Die erforderlichen Clientheader werden der Anforderung hinzugefügt. Konto und Kennwort sind Variablen, auf die vom verschlüsselten isolierten Speicher zugegriffen wird. Zur Unterstützung des Model View View Model-Musters wird das MVVM Light Toolkit verwendet (Weitere Informationen finden Sie auf der MVVM Light Toolkit-Website (http://go.microsoft.com/fwlink/?LinkId=216135)). In diesem Beispiel wird DispatcherHelper.CheckBeginInvokeOnUI aufgerufen, um ResponseStream zu verarbeiten, und die Ergebnisse werden an AddNewsfeedItems übergeben, um die Ergebniswerte zu extrahieren und diese der NewsfeedItems-Sammlung hinzuzufügen. 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 23 { var response = client.EndGetResponse(asResult); StreamReader reader = new StreamReader(response.GetResponseStream()); string responseString = reader.ReadToEnd(); AddNewsfeedItems(responseString); } catch (WebException failure) { throw failure; } }); }, null); } Nach dem Abschluss des Downloads fügt AddNewsfeedItems die Ergebnisse der an die Benutzeroberfläche gebundenen Sammlung hinzu. Die responseString-Methode wird in ein XDocument analysiert, und die beiden Namespaces werden hinzugefügt. LINQ wird verwendet, um die Eintragsammlung abzufragen und MyNewsfeedViewModel-Objekte zu erstellen, die die resultierenden Newsfeedelemente und die Autorinformationen erstellen. Schließlich werden die Elemente der MyNewsFeedItems-Sammlung hinzugefügt. 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 = 24 (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); } }); } Benutzerprofildienst – Kollegen Der SharePoint-Benutzerprofildienst ermöglicht das Anzeigen, Erstellen, Bearbeiten und Verwalten von Benutzerprofilinformationen in SharePoint 2010-Produkten. Der Dienst ist der primäre Einstiegspunkt für die Anwendung, um Informationen zu Kollegen und Benutzerprofilen abzurufen. Der folgende Code veranschaulicht, wie der Benutzerprofildienst von Windows Phone 7 über UAG aufgerufen wird. Erstellen eines Benutzerprofildienst-Verweises Beginnen Sie damit, Ihrem Windows Phone 7-Projekt einen Dienstverweis hinzuzufügen. Geben Sie die URL am Endpunkt des SharePoint-Benutzerprofildiensts ein, beispielsweise: http://spwp7intranet.contoso.com/_vti_bin/userprofileservice.asmx Geben Sie dem Dienstverweis einen leicht erkennbaren Namen, z. B. UserProfileService, und klicken Sie auf OK. Die Webmethode „GetUserColleagues“ Die LoadColleagueData-Methode verwendet die GetUserColleaguesAsync-Methode des Benutzerprofildiensts, um eine Sammlung von Kollegen als ContactData-Objekte zurückzugeben. Nach der Erstellung der Klassen 25 BasicHttpBinding und EndpointAddress wird eine neue UserProfileServiceSoapClient-Klasse mit den erforderlichen Parametern erstellt. Die Dienstaufrufe in Silverlight müssen asynchron erfolgen. Ein neuer OnCompleted-Ereignishandler wird für das GetUserColeaguesCompleted-Ereignis hinzugefügt. Um die von UAG benötigten Header hinzuzufügen, wird ein OperationContextScope-Objekt verwendet, und eine HttpRequestMessageProperty-Klasse wird erstellt, die die beiden Header enthalten, die für die Authentifizierung bei UAG erforderlich sind. Die Header werden der ausgehenden Meldung hinzugefügt, und der asynchrone Aufruf erfolgt an GetUserColleaguesAsync unter Verwendung des Benutzerkontos als Parameter. 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 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 26 OperationContext.Current.OutgoingMessageProperties.Add( HttpRequestMessageProperty.Name, request); //Call the method ups.GetUserColleaguesAsync(account); } } Wenn die GetUserColleaguesAsync-Methode Ergebnisse zurückgibt, wird das ups_GetUserColleaguesCompletedEreignis aufgerufen. Wenn kein Fehler auftritt, wird LINQ verwendet, um eine Liste des PersonViewModels-Objekts aus der resultierenden ContactData-Klasse zu erstellen. Der letzte Schritt ist das Hinzufügen des PersonViewModelsObjekts aus der Liste zu der Liste der ColleaguesList-Objekte im Benutzteroberflächenthread durch den Aufruf der CheckBeginInvoke-Methode und die Übergabe unserer Liste des PersonViewModels-Objekts. 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 }; //Load the Colleagues list on the UI thread DispatcherHelper.CheckBeginInvokeOnUI(() => { foreach (PersonViewModel c in colleagues.ToList()) { Colleagues.Add(c); } 27 }); } else { Debug.WriteLine("Error loading the Colleagues List: {0}", e.Error.Message); } } Benutzerprofildienst – Benutzerprofildaten Die GetUserColleagues-Webmethode gibt keine Benutzerprofile zurück. Die Methode gibt das ContactData-Objekt zurück, das an die GetUserProfileByName-Methode des Benutzerprofildiensts zurückgegeben werden kann, die ein vollständiges Benutzerprofilobjekt zurückgibt, das zum Anzeigen eines vollständigen Benutzerprofils verwendet werden kann. Die folgende Methode wird verwendet, um die Benutzerprofildetails für unsere Kollegen zurückzugeben. Es werden die Felder AboutMe, WorkPhone, MobilePhone und PictureURL zurückgegeben. Die GetUserProfileProperties-Methode verwendet ein PersonViewModel-Objekt für die Person, deren Profil wir abrufen möchten. In dieser Methode erstellen wir einen Meldungsinspektor, um ein Problem zu beheben, das verhindert, dass der Rückgabewert der PropertyData-Klasse nicht ordnungsgemäß analysiert wird. Anschließend erstellen wir eine BasicHttpMessageInspectorBinding-Methode, die den Meldungsinspektor als Parameter verwendet, die Bindung und den Endpunkt für die UserProfileServiceSoapClient-Methode übergibt und den GetUserProfileByNameCompleted-Ereignsihandler registriert. Um die von UAG benötigten Anforderungsheader hinzuzufügen fügt ein OperationContextScope-Objekt der Anforderung die Header Authorization und UserAgent hinzu. Anschließend wird die GetUserProfileByNameAsync-Methode aufgerufen und der Kontoname für den Benutzer und das zu aktualisierende PersonViewModel-Objekt übergeben. 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); 28 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); Debug.WriteLine("Getting User Profile for: {0}", person.AccountName); //Call the method ups.GetUserProfileByNameAsync(person.AccountName, person); } } Wenn der GetUserProfileByNameCompleted-Ereignsihandler aufgerufen wird, werden die Rückgabeeigenschaftswerte (falls vorhanden) untersucht und der entsprechenden Eigenschaft des PersonViewModel-Objekts zugewiesen. private void ups_GetUserProfileByNameCompleted(object sender, GetUserProfileByNameCompletedEventArgs e) 29 { 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": ((PersonViewModel)e.UserState).PictureUrl = propertyData.Values.Count > 0 ? (propertyData.Values[0].Value as string) : String.Empty; break; } } } else { Debug.WriteLine(e.Error.Message); } 30 } Hinweis: Der Meldungsinspektor in diesem Beispiel wird nur zur Verwendung in einer Umgebung empfohlen, in der die neuesten Silverlight-Updates ausgeführt wurden. Weitere Informationen finden Sie unter Problemumgehung für den Zugriff auf einige ASMX-Dienste aus Silverlight 4 (http://go.microsoft.com/fwlink/?LinkID=216134 ) und GUIDs für den Silverlight- und SharePointBenutzerprofildienst (http://go.microsoft.com/fwlink/?LinkId=216136). Tests Testen der Anwendung im Emulator Die Anwendung in diesem Beispiel wird im Windows Phone 7-Entwicklungsemulator getestet. Der Emulator verwendet die Netzwerkverbindung des Entwicklungshostcomputers. Bei Bedarf können dem Entwicklungscomputer Hostdateieinträge hinzugefügt werden, damit der Emulator die Adressen des UAGEntwicklungsservers auflösen kann. Testen der Anwendung auf einem Gerät Damit die Anwendung auf einem physischen Windows Phone-Gerät getestet werden kann, muss dieses Telefon mit einem öffentlich verfügbaren WLAN verbunden sein, das DNS und Weiterleitung zu dem ZielUAG-Testserver oder einem mit dem Internet verbundenen UAG-Testserver bereitstellt. Überlegungen für Marketplace Nachdem Sie Ihre Anwendung für Windows Phone 7 entwickelt haben, müssen Sie die richtigen Schritte ausführen, um Ihre Anwendung auf sichere Weise auf dem Windows Phone Marketplace zu veröffentlichen. Microsoft hat bereits mehrere Mechanismen implementiert, um Softwarepiraterie bei Anwendungen für Windows Phone 7 zu verhindern. Weiter Informationen zu diesen Maßnahmen finden Sie unter Windows Phone Marketplace – Whitepaper zum Model gegen Softwarepiraterie (http://go.microsoft.com/fwlink/?LinkId=216137). Die grundlegenden Schritte zur Veröffentlichen einer Anwendung für Windows Phone 7 auf dem Windows Phone Marketplace bestehen darin, ein Entwicklerkonto zu erstellen und Ihre Anwendung auf dem Marketplace zu veröffentlichen. Im Artikel Exemplarische Vorgehensweise für die Registrierung als App Hub-Entwickler (http://go.microsoft.com/fwlink/?LinkId=216138) wird die Registrierung eines Entwicklerkontos erläutert. Es muss darauf hingewiesen werden, dass ein Entwicklerkonto an eine Person oder an ein Unternehmen gebunden werden kann. In Abhängigkeit von Ihren Bedürfnissen können Sie sich für ein Konto anmelden, dass am zweckmäßigsten für Sie ist. Die Registrierungsgebühr für beide Kontotypen ist die gleiche. Im Artikel Exemplarische Vorgehensweise für die Einreichung einer Anwendung für Windows Phone 7 (http://go.microsoft.com/fwlink/?LinkId=216139) wird erläutert, wie Sie Ihre Anwendung zur Überprüfung und Veröffentlichung einreichen. Wenn Ihre Anwendung die Anforderungen für die Zertifizierung von Anwendungen für Windows Phone 7 [PDF] (http://go.microsoft.com/?linkid=9730558), erfüllt, wird sie auf dem Windows Phone Marketplace veröffentlicht. 31 Zum Zeitpunkt der Veröffentlichung dieses Whitepapers gibt es keinen „privaten Marketplace“ für Unternehmen, der die öffentliche Verbreitung ihrer Anwendungen verhindert. Informieren Sie sich unter App Hub (http://create.msdn.com) über Updates und Informationen zur Möglichkeiten für Unternehmen, Anwendungen privat zu veröffentlichen. Auch wenn Microsoft zahlreiche Sicherheitsmechanismen implementiert hat, sollten Sie weiterhin besondere Vorsichtsmaßnahmen ergreifen, um Ihren Code zu schützen, falls jemand in den Besitz einer Kopie der .xap-Datei gelangt, die Ihre Anwendung für Windows Phone 7 darstellt. Bevor Sie Ihrer Anwendung auf dem Windows Phone Marketplace veröffentlichen, sollten Sie sicherstellen, dass Sie Ihre Anwendung verschleiert haben, um Ihr geistiges Eigentum zu schützen. Es sind bereits zahlreiche Tools zur Verschleierung von Anwendungen für Windows Phone 7 verfügbar. Auch wenn die folgende Liste nicht vollständig ist, stellt sie doch einen guten Ausgangspunkt für das Kennenlernen der zurzeit verfügbaren Option dar. PreEmptive Solutions Dotfuscator Windows Phone Edition (http://www.preemptive.com/windowsphone7.html) RedGate SmartAssembly 6 EAP (http://www.red-gate.com/MessageBoard/viewforum.php?f=116) DeepSea Obfuscator (http://www.deepseaobfuscator.com/) Eine zuverlässige Verschleierung ist ein sich wiederholenden Vorgang, der Zeit zum Testen und Prüfen benötigt. Planen Sie Zeit in Ihren Projektplan ein, um Ihre Anwendung für Windows Phone 7 zu verschleiern, dies zu testen und zu überprüfen, dass der Umfang der Verschleierung Ihren Anforderungen entspricht. Sie können das Windows Phone 7 Application Deployment Tool (Abbildung 7) verwenden, um verschleierte Anwendungen für Windows Phone 7 zu testen. Dieses Tools ermöglicht die Bereitstellung Ihrer verschleierten Anwendung für Windows Phone 7 auf einem tatsächlichen Windows Phone 7-Gerät, das Sie mithilfe Ihres Entwicklerkontos registriert haben oder die Bereitstellung im Windows Phone 7-Emulator. 32 Abbildung 7: Windows Phone 7 Application Deployment Tool Nach der Bereitstellung und dem Test einer verschleierten Anwendung für Windows Phone 7 stellen Sie möglicherweise fest, dass die Anwendung bei einer sehr starken Verschleierung (bei der alle verfügbaren Optionen zum Schutz des Codes aktiviert wurden) auf einem Windows Phone 7-Gerät oder im Windows Phone 7-Emulator nicht richtig ausgeführt wird. Andererseits stellen Sie möglicherweise fest, dass Ihre Anwendung bei Verwendung einer minimalen Verschleierung zwar richtig ausgeführt wird, der Umfang der Verschleierung jedoch nicht Ihren Anforderungen entspricht. Sie können folgendermaßen vorgehen, um festzustellen, welcher Grad der Verschleierung von einem Verschleierungstool auf Ihre Anwendung angewendet wurde. Suchen Sie zunächst die .xap-Datei, die Ihre Anwendung für Windows Phone 7 darstellt, und benennen Sie Sie Dateierweiterung zu .cab oder .zip um. Öffnen Sie anschließend die Archivdatei, und extrahieren Sie den Inhalt. Verwenden Sie anschließend ein Tool wie RedGate .NET Reflector, um die Ihrer Anwendung entsprechende Assembly zu öffnen. Wenn Sie 33 den Knoten Resources öffnen, können Sie alle XAML-Dateien anzeigen und diese auf der Festplatte speichern. (Abbildung 8) Abbildung 8: Speichern von XAML-Dateien mithilfe von .NET Reflector Anschließend können Sie die XAML-Dateien untersuchen, und den Grad der Verschleierung feststellen, der auf den Code angewendet wurde. Sie sind möglicherweise erstaunt darüber, dass eine geringe Verschleierung den Inhalt einer XAML-Datei gar nicht verändert und eine stärkere Verschleierung lediglich Leerzeichen entfernt. Daher empfiehlt sich die Verwendung des Model View View Model-Musters, um Präsentationslogik und Code von Datenzugriffsschichten zu trennen. Sie können auch den Code in den Assemblys untersuchen, auf denen Ihre Anwendung für Windows Phone 7 basiert. Abbildung 9 stellt eine verschleierte Assembly dar. 34 Abbildung 9: Auf einer Anwendungsassembly für Windows Phone 7 angewendete Verschleierung In Bezug auf die Verschleierung ist zu bedenken, dass keine noch so starke Verschleierung einen sehr versierten Hacker davon abhalten kann, den größten Teil Ihres Quellcodes zurückzuentwickeln. Verschleierungsverfahren dienen dazu, geistiges Eigentum zu schützen, indem eine Barriere geschaffen wird, die eine Rückentwicklung und Diebstahl des Codes wesentlich erschwert. Schlussbemerkung Es stehen zahlreiche Ressourcen für Windows Phone 7-Entwickler zur Verfügung. Der Ausgangspunkt dafür ist App Hub auf MSDN, http://create.msdn.com. Die Artikel, Blogs und Foren unterstützen Entwickler bei einfachen sowie bei fortgeschrittenen Entwicklungsszenarien. SharePoint 2010-Produkte bieten zahlreiche Funktionen für Unternehmen, die die Zusammenarbeit, den Austausch von Kenntnissen, Erfahrungen und Informationen fördern möchten. Unternehmensanwendungen, die Funktionen sowohl von mobilen Geräten als auch von SharePoint nutzen, stellen einen leistungsstarken Vorteil für Unternehmen dar, die Lösungen auf der Grundlage der .NET-Plattform effizient verwalten, warten und entwickeln können. 35 Anhang – Installation und Konfiguration von UAG für SharePoint 2010-Produkte In diesem Abschnitt wird die Einrichtung von Netzwerken und die Installation und Konfiguration eines UAGServers für die Veröffentlichung einer SharePoint-Website für die Windows Phone 7-Entwicklung erläutert. Diese Schritte eignen sich für eine Entwicklungsumgebung. Informationen zur Bereitstellung in einer Produktionsumgebung finden Sie im Lösungshandbuch für die UAG-Veröffentlichung (http://go.microsoft.com/fwlink/?LinkID=206256) auf TechNet. Der UAG-Server benötigt während des Installationsvorgangs mindestens 4 GB RAM. Für eine Demoumgebung sind 2 GB ausreichend, und die Warnmeldung kann ignoriert werden. 1. Erstellen eines virtuellen Computers für SharePoint Server und einen virtuellen UAG-Computer In diesem Beispiel wird 2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM) (http://go.microsoft.com/fwlink/?LinkID=189314) für den virtuellen Computer für SharePoint Server verwendet. Zur Erstellung des virtuellen Computers für den UAG-Server installieren Sie Windows Server 2008 R2 auf einem virtuellen Computer, installieren Sie alle Updates unter Verwendung von Windows Update und fahren Sie mit den folgenden Schritten fort. Netzwerke Im folgenden Diagramm wird veranschaulicht, wie der Server, auf dem SharePoint Server, der UAG-Server und der Entwicklungscomputer für Windows Phone 7 miteinander verbunden werden. In der folgenden Dokumentation wird die Implementierung dieses Szenarios erläutert. 36 Windows 7 Development Machine Hyper-V Host Machine .5 .180 .171 UAG Server Virtual Machine .180 Visual Studio 2010 .6 .1 SharePoint Server Virtual Machine 192.168.150.x – Internal Network | 192.168.1.x – External Network 2. Einrichten von virtuellen Netzwerken für den Hyper-V-Hostcomputer Erstellen Sie auf dem Hyper-V-Hostcomputer folgendermaßen zwei virtuelle Netzwerke. Durch die Einrichtung von zwei Netzwerken wird eine Umkreisnetzwerkumgebung simuliert, bei der der UAG-Server über einen Netzwerkadapter mit dem Internet kommuniziert und über den anderen Netzwerkadapter mit internen Ressourcen – in diesem Fall dem Server, auf dem SharePoint Server ausgeführt wird. Name Verbindungstyp Beschreibung Intern Nur intern Verbindung zwischen dem UAG-Server und dem Server, auf dem SharePoint Server ausgeführt wird UAG extern Extern – Gebunden an den Netzwerkadapter Verbindung zwischen dem WP7Entwicklungscomputer und dem UAGauf dem Hyper-V-Hostcomputer Server Hinweis: Die IP-Adresse kann in Ihrer Umgebung geringfügig abweichen. Es ist entscheidend, dass das interne Netzwerk in einem anderen Subnetz ausgeführt wird als das externe Netzwerk. 37 Legen Sie die TCP/IP-Einstellungen für den Adapter des internen Netzwerks auf dem Hyper-V-Hostcomputer folgendermaßen fest. Legen Sie die TCP/IP-Einstellungen für den Adapter des externen Netzwerks auf dem Hyper-V-Hostcomputer folgendermaßen fest. 38 3. Einrichten von Netzwerken für den virtuellen Hyper-V-Computer Fügen Sie auf dem virtuellen Computer des UAG-Servers einen weiteren Netzwerkadapter hinzu, und konfigurieren Sie den virtuellen Computer des UAG-Servers für die Verwendung der internen und externen virtuellen UAG-Netzwerke in Hyper-V. Fügen Sie auf dem virtuellen Computer für SharePoint Server einen weiteren Netzwerkadapter hinzu, und konfigurieren Sie den virtuellen Computer für SharePoint Server für die Verwendung der internen und externen virtuellen UAG-Netzwerke in Hyper-V. 39 Legen Sie die TCP/IP-Einstellungen für den Adapter des internen Netzwerks auf dem virtuellen Computer für den UAG-Server folgendermaßen fest. Legen Sie die TCP/IP-Einstellungen für den Adapter des externen Netzwerks auf dem virtuellen Computer für den UAG-Server folgendermaßen fest. 40 Legen Sie die TCP/IP-Einstellungen für den Adapter des internen Netzwerks auf dem virtuellen Computer für SharePoint Server folgendermaßen fest. Legen Sie die TCP/IP-Einstellungen für den Adapter des externen Netzwerks auf dem virtuellen Computer für SharePoint Server folgendermaßen fest. 41 4. Vorbereiten des virtuellen Computers für den UAG-Server für die UAG-Installation Melden Sie sich bei dem virtuellen Computer für den UAG-Server an. Benennen Sie diesen zu UAG1 um, fügen Sie ihn der Domäne contoso.com hinzu, und starten Sie den Computer neu. Hinweis: Wenn Sie nicht 2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM) verwenden (siehe http://go.microsoft.com/fwlink/?LinkID=189314&clcid=0x407), fügen Sie den UAG-Server der gleichen Domäne hinzu wie den Server, auf dem SharePoint Server ausgeführt wird. Stellen Sie sicher, dass 2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM) ausgeführt wird. Verwenden Sie die folgenden Anmeldeinformationen, um den virtuellen Computer für den UAG-Server der Domäne contoso hinzuzufügen. Benutzername: contoso\administrator Kennwort: pass@word1 42 Starten Sie den Computer neu, und melden Sie sich unter Verwendung der Anmeldeinformationen „contoso\administrator“ oder der für Ihre Umgebung spezifischen Anmeldinformationen an. 5. Snapshot des virtuellen Computers für den UAG-Server Fahren Sie den virtuellen Computer für den UAG-Server herunter, und erstellen Sie einen Snapshot in der Hyper-V-Verwaltungskonsole. 6. Installieren des UAG-Servers Stellen Sie zunächst UAG-Installationsmedien auf dem virtuellen Computer für den UAG-Server bereit. Starten Sie anschließend den virtuellen Computer für den UAG-Server, und melden Sie sich unter Verwendung der Anmeldinformationen „contoso\administrator“ an. Nachdem Sie sich angemeldet haben, überprüfen Sie, dass Sie sich mithilfe der Anmeldeinformationen „contoso\administrator“ angemeldet haben. Öffnen Sie eine Eingabeaufforderung, geben Sie whoami ein, und drücken Sie die EINGABETASTE, um die Anmeldeinformationen zu überprüfen. Starten Sie anschließend die UAG-Installation vom Installationsmedium. Weitere Installationsinformationen finden Sie unter Installieren von SP1 für Forefront UAG 2010 43 (http://go.microsoft.com/fwlink/?LinkId=216130) auf TechNet. (Hinweis: Sie können UAG nicht während einer Remotesitzung installieren, Sie müssen es von der Konsole aus installieren.) Klicken Sie auf Forefront UAG installieren. In einem Entwicklungsszenario können Sie den virtuellen Computer für den UAG-Server mit weniger als 4 GB RAM ausführen. Wenn Sie dem virtuellen Computer für den UAG-Server weniger als 4 GB zugwiesen haben, klicken Sie auf Weiter. 44 Klicken Sie auf der Willkommenseite des Assistenten auf Weiter >. 45 Klicken Sie auf Ich akzeptiere die Lizenzbedingungen für Microsoft-Software und dann auf Weiter. 46 Klicken Sie auf der Seite Installationsspeicherort auswählen auf Weiter. 47 An diesem Punkt beginnt der Installationsvorgang. Das Installationsprogramm installiert alle von UAG benötigten Rollen und Features und konfiguriert den Server für UAG. 48 Klicken Sie auf der Seite Setup-Assistent ist abgeschlossen auf Fertig stellen. 7. Snapshot des virtuellen Computers für den UAG-Server Nach dem Neustart des virtuellen Computers für den UAG-Server und dem Abschluss der UAG-Installation fahren Sie den virtuellen Computer für den UAG-Server herunter, und erstellen Sie einen Snapshot in der Hyper-V-Verwaltungskonsole. 8. Erstkonfiguration und Aktivierung des UAG-Servers Starten Sie den virtuellen Computer für den UAG-Server, und melden Sie sich unter Verwendung der Anmeldinformationen „contoso\administrator“ an. Nachdem Sie sich angemeldet haben, überprüfen Sie, dass Sie sich mithilfe der Anmeldeinformationen „contoso\administrator“ angemeldet haben. Öffnen Sie eine Eingabeaufforderung, geben Sie whoami ein, und drücken Sie die EINGABETASTE, um die Anmeldeinformationen zu überprüfen. 49 Zum Starten des UAG-Konfigurationsassistenten klicken Sie auf Start | Alle Programme |Microsoft Forefront UAG | Forefront UAG-Verwaltung. Klicken Sie auf Netzwerkeinstellungen konfigurieren. 50 Klicken Sie auf Weiter. 51 Nehmen Sie die Einstellungen für den Netzwerkadapter entsprechend dem vorstehenden Screenshot vor, und klicken Sie auf Weiter. 52 Klicken Sie auf Weiter. 53 Klicken Sie auf Fertig stellen. In diesem Schritt definieren Sie den UAG-Server als „Einzelserver“-Konfiguration. 54 Klicken Sie auf Servertopologie definieren. Klicken Sie auf Weiter. 55 Klicken Sie auf Einzelner Server, und klicken Sie dann auf Weiter. 56 Klicken Sie auf Fertig stellen. Klicken Sie auf An Microsoft Update teilnehmen. 57 Klicken Sie auf Weiter. 58 Klicken Sie auf Microsoft Update beim Überprüfen auf Updates verwenden (empfohlen), und klicken Sie dann auf Weiter. 59 Klicken Sie auf Ja oder Nein, und klicken Sie dann auf Weiter. 60 Klicken Sie auf Fertig stellen. 61 Klicken Sie auf Schließen. Klicken Sie auf Ja, um die Konfiguration zu aktivieren. 62 Geben Sie ein Kennwort ein, und klicken Sie dann auf Weiter >. Klicken Sie auf Aktivieren. 63 Klicken Sie auf Fertig stellen. Der Aktivierungsassistent ist abgeschlossen, die UAG-Konfiguration ist jedoch möglicherweise noch nicht vollständig aktiviert. Um dies sicherzustellen, aktivieren Sie die Informationsmeldungen im Meldungsfenster. Klicken Sie im Menü Meldungen auf Meldungen filtern. Aktivieren Sie das Kontrollkästchen Informative Meldungen. Klicken Sie auf OK. Warten Sie, bis im Meldungsfenster die Meldung Aktivierung erfolgreich abgeschlossen angezeigt wird. 64 9. Erstellen des HTTP-Trunks zum Veröffentlichen der SharePoint-Website In diesem Szenario wird ein HTTP-Trunk zu Entwicklungszwecken verwendet. Durch die Verwendung eines HTTP-Trunks anstatt eines HTTPS-Trunks lässt sich die Konfiguration beschleunigen, da die für die Einrichtung von Sicherheitszertifikaten für Secure Sockets Layer (SSL) erforderlichen Schritte entfallen. In einer Entwicklungsumgebung ist die Verwendung von HTTP zudem einfacher, da auf diese Weise nicht alle zwei Wochen ein neues temporäres Zertifikat erstellt werden muss. In einer Test- und in einer Produktionsumgebung wird ein HTTPS-Trunk empfohlen, um die Kommunikation zwischen mobilen Geräten und dem UAG-Server zu gewährleisten. Informationen zu häufig verwendeten Topologien für die Bereitstellung von Servern, auf denen SharePoint 2010-Produkte ausgeführt werden, über UAG finden Sie unter Topologien für die SharePoint-Veröffentlichung (http://go.microsoft.com/fwlink/?LinkId=216131) auf TechNet. Klicken Sie im Navigationsbereich auf HTTPS-Verbindungen, und klicken Sie dann auf Neuer Trunk. Klicken Sie auf Weiter. 65 Klicken Sie in Schritt 1 des Assistenten zum Erstellen eines Trunks auf Portal-Trunk, und klicken Sie dann auf Weiter. 66 Geben Sie in Schritt 2 des Assistenten zum Erstellen eines Trunks im Feld Trunkname den Wert ContosoMobile ein. Dieser Name ist keine navigierbare URL, sondern ein identifizierbarer Anzeigenahme für den HTTP-Trunk. Geben Sie im Textfeld Öffentlicher Hostname den Wert portal.contoso.com ein. Dieser Wert macht für den HTTP-Trunk einen Endpunkt verfügbar, der von UAG zur Erstellung einer einzelnen Portalumgebung verwendet wird, die alle Anwendungen auf einer einzigen Seite veröffentlicht, beispielsweise unsere SharePoint-Website. Wählen Sie die IP-Adresse entsprechend der IP-Adresse des externen Netzwerks für den virtuellen Computer für den UAG-Server aus. Klicken Sie auf Weiter. 67 Klicken Sie in Schritt 3 des Assistenten zum Erstellen eines Trunks auf Hinzufügen, um das Dialogfeld zu öffnen, in dem Sie dem Trunk den Authentifizierungsserver hinzufügen können. Klicken Sie auf Hinzufügen. Wählen Sie in der Dropdownliste Servertyp die Option Active Directory aus. Geben Sie im Textfeld Servername den Wert demo2010a.contoso.com ein. Dies ist der vollqualifizierte Domänenname für den Domänencontroller, der auf dem virtuellen Computer SP2010-7a ausgeführt wird. 68 Klicken Sie im Abschnitt Verbindungseinstellungen auf Domänencontroller definieren. Klicken Sie im Abschnitt Verbindungseinstellungen auf Definieren. Geben Sie im Dialogfeld Domänencontroller die interne IP-Adresse für den Domänencontroller ein. Für den virtuellen Computer SP2010-7a ist diese IP-Adresse 192.168.150.1. Klicken Sie auf OK. Klicken Sie im Abschnitt Sucheinstellungen auf die Schaltfläche … neben Basis-DN. Wählen Sie im Dialogfeld Suchpfad in der Dropdownliste Basis-DN auswählen den Wert CN=Users,DC=contoso,DC=com aus. Klicken Sie auf OK. Aktivieren Sie das Kontrollkästchen Unterordner einschließen. Legen Sie für Ebenen verschachtelter Gruppen den Wert 0 fest. Geben Sie im Abschnitt Serverzugriff im Textfeld Benutzer (Domäne\Benutzer)den Wert contoso\administrator ein. Geben Sie im Textfeld Kennwort den Wert pass@word1 ein. 69 Klicken Sie auf OK. Klicken Sie auf Ja. Wählen Sie den Server demo2010a.contoso.com aus, und klicken Sie auf Auswählen. 70 Klicken Sie auf Benutzer stellt Anmeldeinformationen für jeden ausgewählten Server bereit. (In einer Umgebung mit einem einzelnen Server wie dieser können Sie Benutzer wählt aus einer Serverliste aus auswählen.) Aktivieren Sie das Kontrollkästchen Den selben Benutzernamen verwenden. Klicken Sie auf Weiter. 71 Klicken Sie auf Forefront UAG-Zugriffsrichtlinien verwenden. Für Entwicklungszwecke sind die standardmäßigen Forefront UAG-Zugriffsrichtlinien ausreichend. In einer Produktionsumgebung können Sie diese Richtlinien für eine für Ihre Umgebung spezifischere Konfiguration anpassen. Klicken Sie auf Weiter. 72 Für Entwicklungszwecke sind die standardmäßigen Forefront-Endpunktrichtlinien ausreichend. In einer Produktionsumgebung können Sie diese Richtlinien für eine für Ihre Umgebung spezifischere Konfiguration anpassen. Klicken Sie auf Weiter. 73 Auf der letzten Seite des Assistenten zur Erstellung eines Trunks wird eine Zusammenfassung der Trunkkonfiguration angezeigt. Klicken Sie auf Fertig stellen, um die Trunkkonfiguration abzuschließen. 74 10. Erstellen der SharePoint-Anwendung Klicken Sie im Abschnitt Anwendungen der Forefront UAG-Verwaltungskonsole auf Hinzufügen. Klicken Sie im Assistenten zum Hinzufügen von Anwendungen auf Weiter. Klicken Sie im 2. Schritt des Assistenten zum Hinzufügen von Anwendungen auf Web. Wählen Sie in der Dropdownliste die Option Microsoft SharePoint Server 2010 aus. 75 Klicken Sie auf Weiter >. Geben Sie im Textfeld Anwendungsname den Wert Contoso-Intranet ein. Dies ist ein Anzeigename für die Anwendung, die Sie mit dem UAG-Server veröffentlichten. Dieser Name wird auf der Startseite des UAG-Portals angezeigt. 76 Klicken Sie auf Weiter. 77 Klicken Sie auf Weiter. Für Entwicklungszwecke sind die standardmäßigen Forefront-Endpunktrichtlinien ausreichend. In einer Produktionsumgebung können Sie diese Richtlinien für eine für Ihre Umgebung spezifischere Konfiguration anpassen. Klicken Sie auf Einen Anwendungsserver konfigurieren. 78 Klicken Sie auf Weiter. Behalten Sie für Adresstyp den Wert IP/Host bei. Geben Sie in der Liste Adressen den Hostnamen oder die interne IP-Adresse 192.168.150.1 des Servers ein, auf dem SharePoint Server 2010 ausgeführt wird. In Abhängigkeit von Ihrer Umgebung können Sie für den Server, auf dem SharePoint Server ausgeführt wird, auch den vollqualifizierten Domänennamen oder die IP-Adresse für Lastausgleichshardware verwenden. Behalten Sie in der Liste Pfade den Standardwert „/“ bei. Dies gibt an, dass die veröffentlichte SharePoint-Anwendung auf der Stammebene veröffentlicht wird. Klicken Sie auf HTTP-Port, und geben Sie 80 in das Feld ein. Wie bereits erwähnt, wird die Einrichtung und die Konfiguration der Entwicklung vereinfacht, wenn anstatt eines HTTPS-Ports ein HTTP-Port verwendet wird. In einer Produktionsumgebung sollte ein HTTPS-Port verwendet werden, um die zwischen dem Clientcomputer und dem UAG-Server übergebenen Anmeldeinformationen zu verschlüsseln. 79 Geben Sie im Textfeld Öffentlicher Hostname den Wert spwp7intranet ein. Dies ist die alternative Zugriffszuordnungs-URL auf dem Server, auf dem SharePoint ausgeführt wird, die den veröffentlichten Websitesammlung entspricht. Dieser Wert ist die URL, die der UAG-Server verwendet, um die Anwendung auf dem Clientcomputer zu veröffentlichen. Verwenden Sie die URL http://spwp7intranet.contoso.com, wenn Sie auf die Websitesammlung intranet.contoso.com über UAG-Serverclients zugreifen. Nachdem der Benutzer authentifiziert wurde, leitet der UAG-Server die Anforderung anschließend als http://spwp7intranet.contoso.com an SharePoint weiter. Die alternative Zugriffszuordnung von SharePoint (wird in späteren Schritten konfiguriert) ordnet die Anforderung http://intranet.contoso.com zu. Klicken Sie auf Weiter. Aktivieren Sie das Kontrollkästchen SSO verwenden. 80 Klicken Sie auf Hinzufügen. Wählen Sie im Dialogfeld Authentifizierungs- und Autorisierungsserver den Wert demo2010a.contoso.com aus. Klicken Sie auf Auswählen. Klicken Sie in der Auswahl Client Authentifizierungsmethode auswählen auf Beide. Aktivieren Sie das Kontrollkästchen Rich Clients die Umgehung der Trunk-Authentifizierung gestatten. Aktivieren Sie das Kontrollkästchen Office formularbasierte Authentifizierung für OfficeClientanwendungen verwenden. 81 Klicken Sie auf Weiter. Klicken Sie auf Ja. Aktivieren Sie im Dialogfeld Portallink das Kontrollkästchen In neuem Fenster öffnen. Der Portallink ist optional, da die Anwendung für Windows Phone 7 direkt auf die SharePoint-APIs zugreift, der Link ist jedoch ein gutes Tool für die Problembehandlung. 82 Klicken Sie auf Weiter. Aktivieren Sie das Kontrollkästchen Alle Benutzer autorisieren. In einer Entwicklungsumgebung bietet der Zugriff für alle Benutzer auf die veröffentlichte SharePoint-Websitesammlung die größte Flexibilität für Tests. In einer Produktionsumgebung gewähren Sie den Zugriff jedoch nur den Benutzern, die berechtigt sind, auf die SharePoint-Websitesammlung zuzugreifen. 83 Klicken Sie auf Weiter. 84 Klicken Sie auf Fertig stellen. 85 11. Konfigurieren der SharePoint-Anwendung Wählen Sie in der Forefront UAG-Verwaltungskonsole im Abschnitt Anwendungen die Option Contoso-Intranet aus, und klicken Sie auf Bearbeiten. Aktivieren Sie auf der Registerkarte Portallink die folgenden Kontrollkästchen: Computerportal, Mobiles Premiumportal und Mobiles Nicht-Premiumportal. 86 Klicken Sie auf OK. 12. Aktivieren der Konfiguration Klicken Sie in der Forefront UAG-Verwaltungskonsole auf der Symbolleiste auf die Schaltfläche Aktivieren. Das Dialogfeld Konfiguration aktivieren wird angezeigt. 87 Klicken Sie auf Aktivieren. Die neue Konfiguration wird auf dem UAG-Server aktiviert. Klicken Sie auf Fertig stellen. Warten Sie, bis im Meldungsfenster unten in der Microsoft Forefront UAG-Verwaltungskonsole die Meldung Aktivierung erfolgreich abgeschlossen angezeigt wird. Auch wenn im Dialogfeld Aktivierungskonfiguration angezeigt wird, dass die Konfiguration erfolgreich aktiviert wurde, ist diese erst abgeschlossen, wenn die Meldung im Meldungsfenster angezeigt wurde. 88 13. Konfigurieren und Überprüfen der alternativen SharePoint-Zugriffszuordnung SharePoint muss für die Beantwortung von Anforderungen für http://spwp7intranet.contoso.com konfiguriert werden und die Anforderungen http://intranet.contoso.com zuordnen. 1. 2. 3. 4. 5. 6. Navigieren Sie in der SharePoint 2010-Zentraladministration zum Abschnitt Anwendungsverwaltung, und wählen Sie Verwaltung von SharePoint-Webanwendungen aus. Wählen Sie Intranet aus, und wählen Sie anschließend im Menüband Erweitern (Webanwendung erweitern) aus. Geben Sie im Dialogfeld Webanwendung auf eine andere IIS-Website erweitern die folgenden Werte ein: Name: SharePoint - spwp7intranet.contoso.com – 80 Port: 80 Hostheader: spwp7intranet.contoso.com Zone: Intranet Klicken Sie auf OK. Überprüfen Sie die Einstellungen, indem Sie zu Anwendungsverwaltung | Webanwendungen | Alternative Zugriffszuordnungen konfigurieren navigieren. Wählen Sie Alternative Zugriffszuordnungssammlung für das Intranet aus, und es solltehttp://spwp7intranet.com angezeigt werden. 14. Hinzufügen von Hostdateieinträgen zu der Entwicklungsumgebung In diesem Szenario werden Hostdateieinträge verwendet, um den UAG-Server und den Server, auf dem SharePoint ausgeführt wird, aufzulösen. Es könnten DNS-Einträge verwendet werden, Hostdateien sind jedoch eine akzeptable Alternative in einer Entwicklungsumgebung. In einer Produktionsumgebung sollten DNS-Einträge für die Namensauflösung verwendet werden. Fügen Sie auf dem Computer, auf dem der Windows Phone 7-Emulator ausgeführt wird, der Hostdatei einen Eintrag hinzu, der auf den öffentlichen Hostnamen und die IP-Adresse verweist, die der Contoso-Intranetportalanwendung auf dem UAG-Server zugeordnet sind. Die Hostdatei befindet sich unter c:\windows\system32\drivers\etc. 192.168.1.171 spwp7intranet.contoso.com Optional können Sie der Startseite des UAG-Portals einen Eintrag hinzufügen. 192.168.1.171 portal.contoso.com 89 15. Testen der Konfiguration Schließen Sie auf dem Computer, auf dem der Windows Phone 7-Emulator ausgeführt wird, alle Webbrowser, um sicherzustellen, dass der Hostdateieintrag erkannt wird. Öffnen Sie Internet Explorer, und navigieren Sie zu http://spwp7intranet.contoso.com. Die UAG-Serveranwendung und das Netzwerkzugriffsportal werden angezeigt. Laden Sie das ActiveX-Steuerelement herunter, und installieren Sie es. 90 Klicken Sie auf Installieren. Klicken Sie auf Ja. Aktivieren Sie das Kontrollkästchen Dieser Website vertrauen, und klicken Sie dann auf Vertrauen. Geben Sie die Anmeldeinformationen eines Benutzers mit Zugriff auf die veröffentlichte SharePoint-Website ein, und klicken Sie auf Anmelden. 91 Die SharePoint-Website wird im Webbrowser angezeigt. Ab jetzt kann auf die über UAG veröffentlichte SharePoint-Website über ein mobiles Gerät, etwa ein Windows Phone 7-Gerät, zugegriffen werden. 92 Optional können Sie den Zugriff auf die UAG-Portalseite testen, indem Sie die Portal-URL http://portal.contoso.com in einem Browser eingeben. 93 UAG stellt darüber hinaus ein Mobiles Premiumportal für Clients wie Windows Phone bereit. Geben Sie in Ihrem Emulatorbrowser die URL http://portal.contoso.com für das Portal ein, und Sie werden zur Anmeldeseite weitergeleitet: Geben Sie die Anmeldeinformationen für Contoso ein (beispielsweise „Contoso\tonip“ und „pass@word1“), und Sie werden zum mobilen Portal weitergeleitet. 94 Wählen Sie den Contoso-Intranetlink aus, und die SharePoint-Startseite sollte angezeigt werden. 95 16. Testen von Newsfeed RSS Wenn SharePoint 2010-Produkte über UAG veröffentlicht werden, werden einige Seiten nicht ordnungsgemäß analysiert. Von größter Wichtigkeit für dieses Dokument ist die Seite Activityfeed.aspx, die den konsolidierten Newsfeed rendert. Testen Sie Ihre Konfiguration mithilfe der folgenden Anweisungen. Activityfeed.aspx Wechseln Sie zur Seite Mein Newsfeed, und zeigen sie den RSS-Feed an. Der folgende Fehler wird angezeigt: 96 Lösung Die Standardregel zum Ausblenden des Protokolls wird auf die Seite ActivityFeed.aspx angewendet. Gehen Sie folgendermaßen vor, um die Regel so zu ändern, dass sie nicht angewendet wird: Öffnen Sie die entsprechende AppWrap-Konfigurationsdatei in einem Text-Editor. Die Dateien befinden sich im Verzeichnis %ProgramFiles%\Microsoft Forefront Unified Access Gateway\von\Conf\WizardDefaults\AppWrapTemplates. Sichern und bearbeiten Sie die dem Protokoll Ihres Portals entsprechende AppWrap-Datei. HTTP_WhlFiltAppWrap_ForPortal für HTTP und HTTPS_WhlFiltAppWrap_ForPortal für HTTPS. Suchen Sie die folgende Zeile: <!-- for sharepoint 2010 conditional appwrap hide log off --> <URL case_sensitive="false">.*\.aspx.*</URL> Ändern Sie sie folgendermaßen: <!-- for sharepoint 2010 conditional appwrap hide log off changed to exclude ActivityFeed.aspx --> <URL case_sensitive="false">^.*(?<!(^|\\|/)(activityfeed))\.aspx.*</URL> Speichern Sie die Datei, und aktivieren Sie die neue Konfiguration. Kehren Sie zur Seite Mein Newsfeed zurück, und klicken Sie auf die Schaltfläche RSS. Die Seite sollte ordnungsgemäß gerendert werden, und die URLs sollten ordnungsgemäß neu geschrieben werden. 97 Ressourcen Forefront Unified Access Gateway auf TechNet http://go.microsoft.com/fwlink/?LinkId=216132&clcid=0x407 Blog „Closer to the Edge“ Autor: Jason Jones Forefront UAG SP1 – Auswirkungen der Änderungen von Endpunktbewertungen auf mobile Geräte wie iPad/iPhone (http://go.microsoft.com/fwlink/?LinkId=216133) Blog des Silverlight-Webdienstteams Problemumgehung für den Zugriff auf einige ASMX-Dienste aus Silverlight 4 (http://go.microsoft.com/fwlink/?LinkId=216134) Informationen zu den Autoren Todd Baginski, MVP Todd ist ein unabhängiger Berater und fünfmaliger Microsoft SharePoint-MVP (Most Valuable Professional), der SharePoint-, Silverlight-, Office-, Windows Phone 7- und .NET-Technologien verwendet, um Websites und benutzerdefinierte Lösungen für Information-Worker zu erstellen. Todd ist Autor und Referent für den Abschnitt Business Connectivity Services (BCS) des MCM-Programms (SharePoint Microsoft Certified Masters) und regelmäßiger Referent auf den TechEd-, SharePoint Connections- und Microsoft SharePoint-Konferenzen. Todd schreibt regelmäßig Kolumnen in der Zeitschrift SharePointPro Connections und fungierte kürzlich als technischer Herausgeber des Buchs von Scot Hillier und Brad Stevenson Professional Business Connectivity Services in SharePoint 2010. Todd hat auch die BPOS-Schulungsmaterialien (Microsoft Business Productivity Online Suite) für SharePoint Online (SPO) 2010 erstellt, während sich BPOS 2010 im Alpha- und Beta-Stadium befanden und hat die BPOS/SPO-Schulungsmaterialien für eine post-TechReady 11-Konferenz nur für Microsoft-Mitarbeiter bereitgestellt. Todd ist sehr aktiv, und er verbringt seine Zeit am liebsten mit seiner Familie oder beim Skilaufen, wann immer sich die Möglichkeit ergibt. Todd ist unter [email protected] zu erreichen. Matthew McDermott, MVP Matthew McDermott, Microsoft SharePoint Server-MVP, ist Gründungsmitglied von Aptillon, Inc. und Principal Consultant für AbleBlue in Austin, Texas. AbleBlue ist auf die SharePoint-Integration, Strategie und Implementierungsberatung spezialisiert. Matthew ist Autor von und Spezialist für SharePoint-Technologien mit dem Schwerpunkt auf Webinhaltsverwaltung, Zusammenarbeit, Suche und Soziale Netzwerke. Matthew hat seit 2002 SharePoint-Implementierungen für Fortune 500-Unternehmen geleitet. Matthews Blog (www.ableblue.com/blog) bietet interessante 98 Themen sowohl für Entwickler und IT-Experten als auch für Endbenutzer. Matthew ist unter [email protected] zu erreichen. Matthew verbringt seine Freizeit als Hundeführer für K9 Search • Austin, ein freiwilliges K9-Suchteam, das das FBI und die Polizeidirektionen von Austin und San Antonio unterstützt. Darüber hinaus ist er ein vollendeter Koch und Barkeeper, der so viel Zeit wie möglich mit seiner Frau und seinen Hunden verbringt. Ben Ari Ben Ari ist leitender Sicherheitstechniker bei Microsoft mit dem Schwerpunkt auf UAG, und er bietet Support für das Produkt für Premier- und Professional-Kunden von Microsoft weltweit. Ben ist zudem aktiver Journalist und Blogger, und er hat kürzlich das Microsoft Forefront UAG 2010 Administrator's Handbook (ISBN 978-1849681629) veröffentlicht. Sie finden Bens Blog unter http://blogs.technet.com/b/ben. 99