Neues Open-Source Projekt: Silverlight OOB Extension

by Gregor Biswanger 2. Juni 2009 04:27

Ab Silverlight 3 kommt mit Out-of-Browser (kurz OOB) ein attraktives Feature mit sich. Somit lassen sich Silverlight Anwendungen auch außerhalb vom Browser ausführen. Das besondere daran ist, das die Silverlight Anwendung somit Offline zur Verfügung steht. Damit dieses Feature aktiviert und genutzt werden kann, muss lediglich die AppManifest.xml verändert werden. In der Datei ist eine bestehende Deklaration Kommentiert, der nur manuell freigegeben werden muss. Der verfügbare Text steht nun für den Titel und für die Beschreibung der späteren Anwendung. Auch das hinzufügen eines beliebigen Icons ist hier möglich.

 

Abb.1.1. – OOB Feature in AppManifest.xml aktivieren.

Bei der gestarteten Silverlight Anwendung steht jetzt mittels rechtsklick ein weiterer Aktiver Auswahlpunkt im Menü „Install Out of Browser Silverlight…“. Folgend erscheint ein Dialog mit der Anfrage, wo eine Verknüpfung zur Anwendung angelegt werden soll. Die Installation wird ohne Administratorrechte durchgeführt. Dies wird ermöglicht, da die Silverlight Anwendung in das Benutzerprofil (Roaming-Profil) kopiert wird. Dabei wird die XAP-File und Meta-Informationen, wie zum Beispiel die URL des Servers in zusätzlichen Dateien abgelegt. Der Pfad der Offline Dateien liegt demnach unter: „C:\Users\...\AppData\LocalLow\Microsoft\Silverlight\Offline“.

Die Installation des OOB kann auch manuell im Source-Code ausgelöst werden. Wichtig! Dies ist nur möglich in einem Event, das von einem Benutzer ausgeführt wurde, zum Beispiel mittels Click-Event. Mit folgendem Code wird dies umgesetzt: Application.Current.Detach();.

Abb.1.2. – Silverlight Anwendung Offline Installieren.

Das Deinstallieren der Anwendung geschieht auf dem gleichen Weg mittels wiederholten Rechtsklicks auf die Anwendungsoberfläche und dann im Menü unter „Remove this application“.

Abb.1.3. –Silverlight Anwendung Deinstallieren.

Sehr Attraktiv ist auch das sich die Offline Anwendung automatisch Updatet und Aktualisiert sobald sich auf dem Herkunftsserver eine neue Version anbietet. Wenn die Anwendung dazu einen weiteren Neustart oder andere beliebige Logik benötigt, kann das Updaten vorher durch Events abgefangen und behandelt werden.

Über den Status Informiert sein

Bei Silverlight Anwendungen befindet sich die Hauptsächliche Geschäftslogik auf dem Server. Nun wird aber bei einer Offline-Anwendung eine eingeschränkte Logik abverlangt. Das dies Aktiviert und erkannt werden kann gibt es weitere Klassen und Events, die dafür zur Verfügung stehen.

Zum einem ist es das Event NetworkAddressChanged aus der KlasseNetworkChange. Das sofort ausgelöst wird, wenn auf dem Client sich der Status des Netzwerkes ändert (siehe Abb.1.4).

Abb.1.4. –Das NetworkAddressChanged-Event

Außerdem kann der Status auch direkt von der Application-Klasse abgefragt werden.

Abb.1.5. –Direkte Abfrage über den Status der Anwendung

 

Silverlight OOB Extension

 


Wie bereits erwähnt werden bei Silverlight Anwendungen die Hauptsächliche Logik und deren Daten vom Server geliefert. Wenn eine Silverlight Anwendung nun Offline zur Verfügung steht, ist es kein Problem diesen Status herauszufinden und dementsprechend zu reagieren. Doch wie sieht es mit den Daten aus? Diese können Offline auch nicht mehr vom Server abgefragt werden. Bisher bietet Silverlight 3 in der aktuellen Betaversion keinen Lösungsansatz dafür an.

Um diese Anforderung abzudecken habe ich das Projekt Silverlight OOB extension als Open-Source auf Codeplex ins Leben gerufen. Die Vision des Projektes besteht darin, das Silverlight Anwendungen die auch Offline ausgeführt werden sollen auch Ihre Daten geliefert bekommen. Diese sollen je nach Logik zur Verfügung stehen und später an einem zusätzlichen Web-Service, der mit dem Sync Framework ausgestattet ist, aktualisiert werden können.

Die erste veröffentlichte Library befindet sich noch im Alpha Status und kann derzeit nur Daten zum Lesen zur Verfügung stellen. Bei Daten sind dabei lediglich Objekte mit Informationen bedacht. Dabei müssen die Entities das Attribut „Serializable“ tragen oder sie kommen aus einer Windows Communication Foundation-Schnittstelle (WCF). Das wäre zum Beispiel von einem ADO.NET Data Service oder einem normalen Standard Web-Service.

 

Die OOB Extension verwenden

 

Das implementieren der Extension ist sehr einfach. Dazu muss lediglich die Library silverlight.oob.extension.dll in die Referenzen (Verweise) hinzugefügt werden. Dazu muss man anschließend dann den Namespace mittels „using Silverlight.OOB.extension;“ deklarieren. 

Jetzt muss für jedes Objekt das später offline zur Verfügung gestellt werden soll, eine Instanz der Klasse OfflineCaching gefolgt von der Klasse des gewünschten Objekts erzeugen. Im folgenden Beispiel wird für die Klasse Customers aus der Northwind Datenbank ein OfflineCache-Objekt erzeugt. Die Klasse Customers wird später von ADO.NET Data Services als IEnumerable zur Verfügung gestellt. Daher wird sofort bei der OfflineCaching-Klasse mit Deklariert (siehe Abb.1.6). Wenn die Daten nun vom Server geliefert werden, muss das vom OfflineCaching-Objekt mittels Cast-Methode in den Speicher abdrücken. Das Customers-Objekt wird anschließend sofort wieder zurückgegeben, so dass dies direkt zwischen dem Data-Binding gehängt werden kann.

Abb.1.6. –Instanz der Klasse OfflineCaching für die Klasse Customers.

Beim wiederholten Starten der Anwendung kann jetzt abgefragt werden ob dies im OOB geschieht. Wichtig dabei ist, dass gleich nochmal abgefragt werden muss, ob überhaupt Daten zum gewünschten Objekt im Speicher enthalten sind. Dazu wird die Methode IsChachingSessionExists() zur Verfügung gestellt. Demgemäß kann dann direkt ein Data-Binding vom Speicher durch die Methode GetDataFromOfflineCaching() an DataContext oder an ItemsSource hinzufügen

Abb.1.8. – Daten vom Speicher direkt mittels Data-Binding hinzufügen.

 

Projektseite auf Codeplex

http://oobextension.codeplex.com

 

Fazit 

Diese einfache Funktionalität läuft bereits sehr Stabil. Weitere Features werden derzeit Programmiert. Es ist gerne jeder willkommen der ernsthaft Interesse hat an diesem Projekt teilzunehmen. Bitte einfach eine E-Mail an mich über den Blog hier. Gerne höre ich auch Feedback über die Verwendung der Library in eigene Projekte oder anderen Anregungen wie zum Beispiel weitere Feature wünsche, Bug-Meldungen etc.

Jeder auch nur so kleine Artikel, Blog-Eintrag oder Newsmeldung unterstützt das Projekt und ich bin sehr Dankbar für jede Hilfe an dieser Stelle.

 

Video

Um das besser Verbildlichen zu können gibt es auch ein kleines Einsteiger Video dazu auf Youtube:
http://www.youtube.com/watch?v=idBE-yXfeDA



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)