Freigeben über


Übersicht über WPF-XAML-Browseranwendungen

XAML browser applications (XBAPs) kombinieren Funktionen von Webanwendungen und Rich Client-Anwendungen. Wie Webanwendungen können XBAPs auf einem Webserver bereitgestellt werden und aus Internet Explorer oder Firefox gestartet werden. XBAPs können von den Funktionen von WPF profitieren, genau wie Rich Client-Anwendungen. Auch die Entwicklung von XBAPs ähnelt der Rich Client-Entwicklung. Dieses Thema bietet eine allgemeine einfache Einführung in die XBAP-Entwicklung und beschreibt die Unterschiede zwischen der Entwicklung von XBAP und standardmäßigen Rich Client-Anwendungen.

Dieses Thema enthält folgende Abschnitte:

  • Erstellen einer neuen XAML-Browseranwendung (XBAP)

  • Bereitstellen einer XBAP

  • Kommunizieren mit der Hostwebseite

  • XBAP-Sicherheitsüberlegungen

  • Überlegungen zur XBAP-Startzeitleistung

Erstellen einer neuen XAML-Browseranwendung (XBAP)

Die einfachste Methode zum Erstellen eines neuen XBAP-Projekts bietet Microsoft Visual Studio 2010: Wenn Sie ein neues Projekt erstellen, wählen Sie WPF-Browseranwendung aus der Liste der Vorlagen aus. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines neuen WPF-Browseranwendungsprojekts.

Wenn Sie das XBAP-Projekt ausführen, wird es in einem Browserfenster geöffnet, nicht in einem eigenständigen Fenster. Wenn Sie die XBAP aus Microsoft Visual Studio debuggen, wird die Anwendung mit Internetzonenberechtigung ausgeführt und löst daher Sicherheitsausnahmen aus, wenn diese Berechtigungen überschritten werden. Weitere Informationen finden Sie unter Sicherheit (WPF) und WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.

HinweisHinweis

Wenn Sie nicht mit Microsoft Visual Studio entwickeln oder mehr über die Projektdateien erfahren möchten, finden Sie weitere Informationen unter Erstellen einer WPF-Anwendung (WPF).

Bereitstellen einer XBAP

Wenn Sie eine XBAP erstellen, schließt die Ausgabe die folgenden drei Dateien ein:

Datei

Beschreibung

Ausführbare Datei (.exe)

Diese enthält den kompilierten Code und hat die Erweiterung EXE.

Anwendungsmanifest (.manifest)

Dieses enthält die der Anwendung zugeordneten Metadaten und hat die Erweiterung MANIFEST.

Bereitstellungsmanifest (.xbap)

Diese Datei enthält die Informationen, die ClickOnce zum Bereitstellen der Anwendung verwendet. Sie hat die Erweiterung XBAP.

Sie stellen XBAPs auf einem Webserver, z. B. Microsoft Internet Information Services (IIS) 5.0 oder höheren Versionen, bereit. Sie müssen .NET Framework nicht auf dem Webserver installieren, müssen aber die WPF Multipurpose Internet Mail Extensions (MIME)-Typen und -Dateierweiterungen registrieren. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren von IIS 5.0 und IIS 6.0, um WPF-Anwendungen bereitzustellen.

Zum Vorbereiten der XBAP für die Bereitstellung kopieren Sie die EXE-Datei und die zugeordneten Manifeste auf den Webserver. Erstellen Sie eine HTML-Seite, die einen Link enthält, um das Bereitstellungsmanifest zu öffnen. Dabei handelt es sich um die Datei mit der Erweiterung .xbap. Wenn ein Benutzer auf den Link zur XBAP-Datei klickt, wird das Herunterladen und Starten der Anwendung automatisch von ClickOnce erledigt. Im folgenden Beispielcode wird eine HTML-Seite dargestellt, die einen Link enthält, der auf eine XBAP zeigt.

<html> 
  <head></head>
  <body> 
    <a href="XbapEx.xbap">Click this link to launch the application</a>
  </body> 
</html> 

Sie können eine XBAP auch im Frame einer Webseite hosten. Erstellen Sie eine Webseite mit einem oder mehreren Frames. Legen Sie die Quelleigenschaft eines Frames auf die Bereitstellungsmanifestdatei fest. Wenn Sie den integrierten Mechanismus verwenden möchten, um zwischen der Hostingwebseite und der XBAP zu kommunizieren, müssen Sie die Anwendung in einem Frame hosten. Im folgenden Beispielcode ist eine HTML-Seite mit zwei Frames dargestellt, wobei die Quelle für den zweiten Frame auf eine XBAP festgelegt ist.

<html> 
  <head>A page with frames.</head>
    <frameset cols="50%,50%"> 
      <frame src="introduction.htm" > 
      <frame src="XbapEx.xbap" > 
  </frameset> 
</html>

Löschen von zwischengespeicherten XBAPs

In einigen Situationen stellen Sie nach dem Neuerstellen und Starten der XBAP fest, dass eine frühere Version der XBAP geöffnet wird. Dieses Verhalten kann beispielsweise auftreten, wenn die XBAP-Assemblyversionsnummer statisch ist und Sie die XBAP über die Befehlszeile starten. Da die Versionsnummer der zwischengespeicherten Version (die zuvor gestartet wurde) mit der Nummer der neuen Version übereinstimmt, wird anstelle der neuen Version der XBAP die zwischengespeicherte Version geladen. Stattdessen wird die zwischengespeicherte Version geladen.

In diesen Situationen können Sie die zwischengespeicherte Version entfernen, indem Sie den Befehl Mage (der mit Visual Studio oder Windows SDK installiert wird) über die Befehlszeile ausführen: Der folgende Befehl löscht den Anwendungscache.

Mage.exe -cc

Dieser Befehl gewährleistet, dass die neueste Version der XBAP gestartet wird. Wenn Sie die Anwendung in Visual Studio debuggen, sollte die aktuelle Version der XBAP gestartet werden. Es wird empfohlen, die Bereitstellungsversionsnummer mit jedem Build zu aktualisieren. Weitere Informationen über Mage finden Sie unter Mage.exe (Tool zum Generieren und Bearbeiten von Manifesten).

Kommunizieren mit der Hostwebseite

Wenn die Anwendung in einem HTML-Frame gehostet wird, können Sie mit der Webseite kommunizieren, die die XBAP enthält. Dazu rufen Sie die HostScript-Eigenschaft von BrowserInteropHelper ab. Diese Eigenschaft gibt ein Skriptobjekt zurück, das das HTML-Fenster darstellt. Sie können dann auf die Eigenschaften, Methoden und Ereignissen auf dem Fensterobjekt mit regulärer Punktsyntax zugreifen. Sie können auch auf Skriptmethoden und globale Variablen zugreifen. Im folgenden Beispiel wird veranschaulicht, wie Sie das Skriptobjekt abrufen und den Browser schließen.

Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Retrieve the script object  The XBAP must be hosted in a frame or
    ' the HostScript object will be null.
    Dim scriptObject = BrowserInteropHelper.HostScript

    ' Call close to close the browser window.
    scriptObject.Close()
End Sub
private void Button_Click(object sender, RoutedEventArgs e)
{
    // Retrieve the script object. The XBAP must be hosted in a frame or
    // the HostScript object will be null.
    var scriptObject = BrowserInteropHelper.HostScript;

    // Call close to close the browser window. 
    scriptObject.Close();
}

Debuggen von XBAPs, die HostScript verwenden

Wenn die XBAP das HostScript-Objekt verwendet, um mit dem HTML-Fenster zu kommunizieren, müssen Sie zwei Einstellungen angeben, um die Anwendung in Visual Studio auszuführen und zu debuggen. Die Anwendung muss Zugriff auf ihre Ursprungssite haben, und Sie müssen die Anwendung mit der HTML-Seite starten, die die XBAP enthält. Die folgenden Schritte beschreiben, wie diese zwei Einstellungen überprüft werden:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio

  2. Klicken Sie auf der Registerkarte Sicherheit auf Erweitert.

    Das Dialogfeld Erweiterte Sicherheitseinstellungen wird angezeigt.

  3. Stellen Sie sicher, dass das Kontrollkästchen Der Anwendung Zugriff auf die Ursprungssite gewähren aktiviert ist, und klicken Sie dann auf OK.

  4. Wählen Sie auf der Registerkarte Debuggen die Option Browser mit folgender URL starten aus, und geben Sie die URL für die HTML-Seite an, die die XBAP enthält.

  5. Klicken Sie in Internet Explorer auf die Schaltfläche Extras, und wählen Sie dann Internetoptionen aus.

    Das Dialogfeld Internetoptionen wird angezeigt.

  6. Klicken Sie auf die Registerkarte Erweitert.

  7. Aktivieren Sie in der Liste Einstellungen unter Sicherheit das Kontrollkästchen Ausführung aktiver Inhalte in Dateien auf dem lokalen Computer zulassen.

  8. Klicken Sie auf OK.

    Die Änderungen werden wirksam, nachdem Sie Internet Explorer neu gestartet haben.

WarnhinweisVorsicht

Aktiven Inhalt in Internet Explorer zu aktivieren, gefährdet möglicherweise den Computer.Weitere Informationen finden Sie unter Security and privacy features in Internet Explorer.Wenn Sie die Internet Explorer-Sicherheitseinstellungen nicht ändern wollen, können Sie die HTML-Seite von einem Server starten und den Visual Studio-Debugger an den Prozess anfügen.

XBAP-Sicherheitsüberlegungen

XBAPs werden in der Regel in einem teilweise vertrauenswürdigen Sicherheitsbereich (Sandbox) ausgeführt, der auf den Berechtigungssatz für die Internetzone beschränkt ist. Daher muss Ihre Implementierung die Teilmenge der WPF-Elemente unterstützen, die in der Internetzone unterstützt werden, oder Sie müssen die Berechtigungen der Anwendung erweitern. Weitere Informationen finden Sie unter Sicherheit (WPF).

Wenn Sie ein WebBrowser-Steuerelement in der Anwendung verwenden, instanziiert WPF das systemeigene WebBrowser-ActiveX-Steuerelement intern. Wenn die Anwendung eine teilweise vertrauenswürdige XBAP ist, die in Internet Explorer ausgeführt wird, wird das ActiveX-Steuerelement in einem dedizierten Thread des Internet Explorer-Prozesses ausgeführt. Daher gelten die folgenden Einschränkungen:

  • Das WebBrowser-Steuerelement sollte Verhalten bereitstellen, das dem Hostbrowser ähnelt, einschließlich Sicherheitseinschränkungen. Einige dieser Sicherheitseinschränkungen können durch die Internet Explorer-Sicherheitseinstellungen gesteuert werden. Weitere Informationen finden Sie unter Sicherheit (WPF).

  • Eine Ausnahme wird ausgelöst, wenn eine XBAP in eine HTML-Seite domänenübergreifend geladen wird.

  • Die Eingabe erfolgt in einem separaten Thread aus dem WPF-WebBrowser, sodass Tastatureingaben nicht abgefangen werden können und der IME-Zustand nicht freigegeben ist.

  • Die zeitliche Steuerung oder die Reihenfolge der Navigation weicht möglicherweise ab, da das ActiveX-Steuerelement in einem anderen Thread ausgeführt wird. Zum Beispiel wird die Navigation zu einer Seite nicht immer abgebrochen, indem eine andere Navigationsanforderung gestartet wird.

  • Ein benutzerdefiniertes ActiveX-Steuerelement hat möglicherweise Probleme mit Kommunikation, da die WPF-Anwendung in einem separaten Thread ausgeführt wird.

  • MessageHook wird nicht ausgelöst, da HwndHost kein Fenster unterordnen kann, das in einem anderen Thread oder einem Prozess ausgeführt wird.

Erstellen einer vollständig vertrauenswürdigen XBAP

Wenn die XBAP volle Vertrauenswürdigkeit erfordert, können Sie das Projekt ändern, um diese Berechtigung zu aktivieren. Die folgenden Schritte beschreiben, wie volle Vertrauenswürdigkeit aktiviert wird:

  1. Öffnen Sie die Projekteigenschaften in Visual Studio

  2. Aktivieren Sie die Option Voll vertrauenswürdige Anwendung auf der Registerkarte Sicherheit.

Diese Einstellung nimmt die folgenden Änderungen vor:

  • In der Projektdatei wird der <TargetZone>-Elementwert in Custom geändert.

  • Im Anwendungsmanifest (app.manifest) wird ein Unrestricted="true"-Attribut dem PermissionSet-Element hinzugefügt.

    <PermissionSet class="System.Security.PermissionSet" 
        version="1" 
        ID="Custom" 
        SameSite="site" 
        Unrestricted="true" 
    />
    

Bereitstellen einer XBAP mit voller Vertrauenswürdigkeit

Wenn Sie eine vollständig vertrauenswürdige XBAP bereitstellen, die nicht dem ClickOnce Trusted Bereitstellungsmodell folgt, hängt das Verhalten bei der Ausführung der Anwendung durch den Benutzer von der Sicherheitszone ab. In einigen Fällen empfängt der Benutzer eine Warnung, wenn er versucht, die Anwendung zu installieren. Der Benutzer kann auswählen, ob die Installation fortgesetzt oder abgebrochen werden soll. In der folgenden Tabelle werden das Verhalten der Anwendung für jede Sicherheitszone und die erforderlichen Schritte für die volle Vertrauenswürdigkeit der Anwendung beschrieben.

Sicherheitszone

Verhalten

Erhalten der vollen Vertrauenswürdigkeit

Lokaler Computer

Automatische volle Vertrauenswürdigkeit

Es ist keine Aktion erforderlich.

Intranet und vertrauenswürdige Sites

Eingabeaufforderung für volle Vertrauenswürdigkeit

Signieren Sie die XBAP mit einem Zertifikat, damit der Benutzer die Quelle in der Eingabeaufforderung sieht.

Internet

Schlägt fehl mit "Vertrauenswürdigkeit nicht gewährt"

Signieren Sie die XBAP mit einem Zertifikat.

HinweisHinweis

Das in der vorherigen Tabelle beschriebene Verhalten gilt für vollständig vertrauenswürdige XBAPs, die nicht dem ClickOnce Trusted Bereitstellungsmodell folgen.

Es wird empfohlen, dass Sie das ClickOnce Trusted Bereitstellungsmodell zum Bereitstellen einer vollständig vertrauenswürdigen XBAP verwenden. Mit diesem Modell können Sie der XBAP unabhängig von der Sicherheitszone automatisch die volle Vertrauenswürdigkeit gewähren lassen, sodass der Benutzer nicht aufgefordert wird. Als Teil dieses Modells müssen Sie die Anwendung mit einem Zertifikat für einen vertrauenswürdigen Verleger signieren. Weitere Informationen finden Sie unter Überblick über die Bereitstellung vertrauenswürdiger Anwendungen and Introduction to Code Signing.

Überlegungen zur XBAP-Startzeitleistung

Ein wichtiger Aspekt der XBAP-Leistung ist ihre Startzeit. Falls eine XPAB die erste zu ladende WPF-Anwendung darstellt, kann die Kaltstartzeit mind. zehn Sekunden ausmachen. Dies ist darauf zurückzuführen, dass die Statusseite von WPF gerendert wird und sowohl die CLR als auch WPF für die Anzeige der Anwendung kaltgestartet werden müssen.

Wenn Sie in .NET Framework 3.5 SP1 starten, wird die XBAP-Kaltstartzeit reduziert, indem eine nicht verwaltete Statusseite in einer frühen Phase im Bereitstellungszyklus angezeigt wird. Die Statusseite wird fast unmittelbar nach dem Start der Anwendung angezeigt, da sie mit systemeigenen Hostingcode angezeigt und in HTML gerendert wird. 

Außerdem wird durch eine verbesserte Parallelität der ClickOnce-Downloadsequenz die Startzeit um bis zu zehn Prozent gesteigert. Nachdem ClickOnce Manifeste heruntergeladen und überprüft hat, beginnt der Anwendungsdownload und die Statusanzeige wird aktualisiert.

Siehe auch

Konzepte

Gewusst wie: Konfigurieren von Visual Studio 2005 zum Debuggen einer XAML-Browseranwendung, um einen Webdienst aufzurufen

Bereitstellen von WPF-Anwendungen (WPF)