Peter Bucher Ralf Westphal

Blog

Nutze den Augenblick
und teile der Welt mit, was Du zu sagen hast.

Mit Silverlight auf den Client zugreifen

Montag, 29. Juni 2009, 14:45 Uhr
Permalink | Kommentare (1) | Kommentare als RSSRSS

Wie kann man aus einer in Silverlight geschriebenen Webanwendung trotz Sandbox auf den zu Grunde liegenden Client zugreifen, um beispielsweise den aktuell angemeldeten Windows-Benutzer zu ermitteln, oder auf spezielle Hardware wie Smartcard-Lesegeräte zuzugreifen?

Die kurze Antwort: Es geht nicht. Otto Fischer schreibt dazu in seinem aktuellen Blog-eintrag Mit Silverlight trotz Sandbox auf Windows-Daten zugreifen. Wahr oder falsch?:

Auf der angegebenen Seite steht dann tatsächlich: “Silverlight – Unter Windows den angemeldeten Benutzer ermitteln”. Das liest sich so, als meine der Autor, er könne den “angemeldeten WINDOWS-Benutzer” ermitteln. Das würde ich wirklich gerne sehen.

Was dann aber gezeigt wird, ist der Zugriff auf HttpContext.Current.User. Och. Das ist aber nicht der Windows-Benutzer. Das ist der Benutzer der Web-Applikation.

Dabei bezieht er sich auf den aktuellen Blogeintrag von Gregor Biswanger, der unter dem Titel Silverlight – unter Windows den angemeldeten Benutzer ermitteln genau dies verspricht. Wie Otto schon korrekt angemerkt hat, ermittelt Gregor aber nicht den aktuell angemeldeten Windows-Benutzer, sondern den der Webanwendung – und das sind unter Umständen zwei verschiedene Benutzer.

Die Frage, die im Raum steht, ist natürlich: Ist es überhaupt möglich, aus Silverlight heraus auf den Client zuzugreifen? Wie oben schon erwähnt, lautet die kurze Antwort, dass dies nicht möglich ist.

Die Begründung liegt schlichtweg in der Sandbox, in der Silverlight ausgeführt wird, und die sämtliche Zugriffe von dem zu Grunde liegenden Client abstrahiert.

Allerdings gibt es zwei potenzielle Workarounds:

Erstens kann die JavaScript-Bridge von Silverlight genutzt werden, um aus der Sandbox auszubrechen und JavaScript auszuführen. Zwar läuft dieses JavaScript nicht mehr innerhalb der Silverlight-Sandbox, sehr wohl aber noch in der JavaScript-Sandbox des Browsers.

Die Nutzung der JavaScript-Bridge bietet sich an, wenn Informationen ermittelt werden sollen, die zwar im Browser zur Verfügung stehen, nicht jedoch in Silverlight. Hierfür seien als Beispiel die aktuellen DPI-Einstellungen genannt, die zur Entwickler einer high DPI-fähigen Anwendung erforderlich sind.

An Stelle der Silverlight-Bridge können auch die von Gregor angeführten Startparameter verwendet werden, doch geht hierbei sämtliche Dynamik verloren: Werte können nur beim Start übergeben werden, danach verhalten sie sich statisch. Auf sich ändernde Umgebungsbedingungen zu reagieren ist mit dieser Technik also nicht möglich.

Zweitens kann auf dem Client zusätzlich zu der Silverlight-Anwendung eine echte Desktopanwendung installiert werden, die beispielsweise als Dienst oder im Systemtray laufen kann. Diese Anwendung hat – da sie nicht an den Browser oder das Silverlight-Addin gebunden ist – vollen Zugriff auf die lokalen Ressourcen, soweit die jeweiligen Benutzerrechte dies gestatten.

Bringt diese Anwendung zusätzlich noch über einen integrierten Webserver, oder wird sie im Rahmen eines leichtgewichtigen Webservers wie beispielsweise XSP ausgeführt, können ihre Dienste problemlos per HTTP in Anspruch genommen werden, was aus einer Silverlight-Anwendung wiederum kein Problem darstellt.

Die Beantwortung der Frage, ob es möglich ist, aus Silverlight heraus auf den Client zuzugreifen, hängt also vom jeweiligen Kontext ab, und davon, welche zusätzlichen Komponenten und Kommunikationskanäle genutzt werden dürfen.

Kommentare

Kommentar schreiben


(Zeigt dein Gravatar icon)  

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading