Condividi tramite


Panoramica delle applicazioni WPF XAML per il browser

Le applicazioni browser XAML (XBAP) combinano funzionalità di applicazioni Web e applicazioni rich-client. Come le applicazioni Web, gli XBAP possono essere distribuiti in un server Web e avviati da Internet Explorer o Firefox in Windows. Analogamente alle applicazioni rich-client, gli XBAP possono sfruttare le funzionalità di WPF. Lo sviluppo di XBAP è anche simile allo sviluppo di rich-client. Questo argomento fornisce una semplice introduzione generale allo sviluppo XBAP e descrive dove lo sviluppo XBAP differisce dallo sviluppo rich-client standard.

Avvertimento

Per funzionare, gli XBAP richiedono browser legacy, come Internet Explorer e versioni precedenti di Firefox. Questi browser meno recenti sono in genere non supportati in Windows 10 e Windows 11. I browser moderni non supportano più la tecnologia necessaria per le app XBAP a causa di rischi per la sicurezza. I plug-in che abilitano XBAP non sono più supportati. Per altre informazioni, vedere Domande più frequenti sulle applicazioni ospitate dal browser WPF (XBAP).

Questo argomento contiene le sezioni seguenti:

Creazione di una nuova applicazione browser XAML (XBAP)

Il modo più semplice per creare un nuovo progetto XBAP è con Visual Studio. Quando si crea un nuovo progetto, selezionare Applicazione browser WPF dall'elenco dei modelli. Per altre informazioni, vedere Procedura: Creare un nuovo progetto di applicazione browser WPF.

Quando si esegue il progetto XBAP, viene aperto in una finestra del browser anziché in una finestra autonoma. Quando si esegue il debug di XBAP da Visual Studio, l'applicazione viene eseguita con l'autorizzazione area Internet e genera quindi eccezioni di sicurezza se tali autorizzazioni vengono superate. Per altre informazioni, vedere Sicurezza e Sicurezza parziale WPF.

Annotazioni

Se non si sviluppa con Visual Studio o si vogliono ottenere altre informazioni sui file di progetto, vedere Compilazione di un'applicazione WPF.

Distribuzione di un XBAP

Quando si compila un XBAP, l'output include i tre file seguenti:

Documento Descrizione
Eseguibile (.exe) Contiene il codice compilato e ha un'estensione .exe.
Manifesto dell'applicazione (manifesto) Contiene i metadati associati all'applicazione e ha un'estensione .manifest.
Manifesto di distribuzione (.xbap) Questo file contiene le informazioni usate da ClickOnce per distribuire l'applicazione e ha l'estensione xbap.

Gli XBAP vengono distribuiti in un server Web, ad esempio Microsoft Internet Information Services (IIS) 5.0 o versioni successive. Non è necessario installare .NET Framework nel server Web, ma è necessario registrare i tipi MIME (Multipurpose Internet Mail Extensions) WPF e le estensioni dei nomi di file. Per altre informazioni, vedere Configurare IIS 5.0 e IIS 6.0 per distribuire applicazioni WPF.

Per preparare XBAP per la distribuzione, copiare il .exe e i manifesti associati nel server Web. Creare una pagina HTML contenente un collegamento ipertestuale per aprire il manifesto della distribuzione, ovvero il file con estensione xbap. Quando l'utente fa clic sul collegamento al file con estensione xbap, ClickOnce gestisce automaticamente i meccanismi di download e avvio dell'applicazione. Il codice di esempio seguente mostra una pagina HTML contenente un collegamento ipertestuale che punta a un XBAP.

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

È anche possibile ospitare un XBAP nel frame di una pagina Web. Creare una pagina Web con uno o più frame. Impostare la proprietà di origine di un frame sul file manifesto della distribuzione. Se si vuole usare il meccanismo predefinito per comunicare tra la pagina Web di hosting e XBAP, è necessario ospitare l'applicazione in un frame. Il codice di esempio seguente mostra una pagina HTML con due frame, la sorgente del secondo frame è collegata a un XBAP.

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

Cancellazione di XBAP memorizzati nella cache

In alcune situazioni dopo la ricompilazione e l'avvio di XBAP, è possibile che venga aperta una versione precedente di XBAP. Ad esempio, questo comportamento può verificarsi quando il numero di versione dell'assembly XBAP è statico e si avvia XBAP dalla riga di comando. In questo caso, poiché il numero di versione tra la versione memorizzata nella cache (la versione avviata in precedenza) e la nuova versione rimane invariata, la nuova versione di XBAP non viene scaricata. Viene invece caricata la versione memorizzata nella cache.

In queste situazioni, è possibile rimuovere la versione memorizzata nella cache usando il comando Mage (installato con Visual Studio o Windows SDK) al prompt dei comandi. Il comando seguente cancella la cache dell'applicazione.

Mage.exe -cc

Questo comando garantisce che venga avviata la versione più recente di XBAP. Quando si esegue il debug dell'applicazione in Visual Studio, deve essere avviata la versione più recente di XBAP. In generale, è consigliabile aggiornare il numero di versione della distribuzione con ogni build. Per altre informazioni su Mage, vedere Mage.exe (strumento di generazione e modifica del manifesto).

Comunicazione con la pagina Web host

Quando l'applicazione è ospitata in un frame HTML, è possibile comunicare con la pagina Web che contiene XBAP. Procedi recuperando la proprietà HostScript di BrowserInteropHelper. Questa proprietà restituisce un oggetto script che rappresenta la finestra HTML. È quindi possibile accedere alle proprietà, ai metodi e agli eventi nell'oggetto finestra usando la sintassi normale dei punti. È anche possibile accedere ai metodi di script e alle variabili globali. Nell'esempio seguente viene illustrato come recuperare l'oggetto script e chiudere il browser.

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();
}
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

Debug di XBAP che usano HostScript

Se XBAP usa l'oggetto HostScript per comunicare con la finestra HTML, è necessario specificare due impostazioni per eseguire ed eseguire il debug dell'applicazione in Visual Studio. L'applicazione deve avere accesso al sito di origine ed è necessario avviare l'applicazione con la pagina HTML che contiene XBAP. I passaggi seguenti descrivono come controllare queste due impostazioni:

  1. In Visual Studio aprire le proprietà del progetto.

  2. Nella scheda Sicurezza fare clic su Avanzate.

    Viene visualizzata la finestra di dialogo Impostazioni di protezione avanzate.

  3. Assicurarsi che la casella di controllo Concedi all'applicazione l'accesso al sito di origine sia selezionata e quindi fare clic su OK.

  4. Nella scheda Debug selezionare l'opzione Avvia browser con URL e specificare l'URL per la pagina HTML che contiene XBAP.

  5. In Internet Explorer fare clic sul pulsante Strumenti e quindi selezionare Opzioni Internet.

    Verrà visualizzata la finestra di dialogo Opzioni Internet.

  6. Fare clic sulla scheda Avanzate .

  7. Nell'elenco Impostazioni in Sicurezza selezionare la casella di controllo Consenti l'esecuzione del contenuto attivo nei file nel computer .

  8. Fare clic su OK.

    Le modifiche saranno effettive dopo il riavvio di Internet Explorer.

Attenzione

L'abilitazione del contenuto attivo in Internet Explorer potrebbe mettere a rischio il computer. Se non si desidera modificare le impostazioni di sicurezza di Internet Explorer, è possibile avviare la pagina HTML da un server e collegare il debugger di Visual Studio al processo.

Considerazioni sulla sicurezza XBAP

Tipicamente, gli XBAP vengono eseguiti in una sandbox di sicurezza a attendibilità parziale, limitata al set di autorizzazioni della zona Internet. Di conseguenza, l'implementazione deve supportare il subset di elementi WPF supportati nell'area Internet oppure è necessario elevare le autorizzazioni dell'applicazione. Per altre informazioni, vedere Security.

Quando si utilizza un controllo WebBrowser nell'applicazione, WPF istanzia internamente il controllo ActiveX WebBrowser nativo. Quando l'applicazione è un XBAP parzialmente attendibile in esecuzione in Internet Explorer, il controllo ActiveX viene eseguito in un thread dedicato del processo di Internet Explorer. Di conseguenza, si applicano le limitazioni seguenti:

  • Il WebBrowser controllo deve fornire un comportamento simile al browser host, incluse le restrizioni di sicurezza. Alcune di queste restrizioni di sicurezza possono essere controllate tramite le impostazioni di sicurezza di Internet Explorer. Per altre informazioni, vedere Security.

  • Viene generata un'eccezione quando un XBAP viene caricato tra domini in una pagina HTML.

  • L'input si trova in un thread separato da WPF WebBrowser, quindi l'input della tastiera non può essere intercettato e lo stato IME non è condiviso.

  • L'intervallo o l'ordine di spostamento può essere diverso a causa del controllo ActiveX in esecuzione su un altro thread. Ad esempio, il passaggio a una pagina non viene sempre annullato avviando un'altra richiesta di spostamento.

  • Un controllo ActiveX personalizzato potrebbe avere problemi di comunicazione perché l'applicazione WPF è in esecuzione in un thread separato.

  • MessageHook non viene generato perché HwndHost non può sottoclassare una finestra in esecuzione in un altro thread o processo.

Creazione di un Full-Trust XBAP

Se XBAP richiede l'attendibilità totale, è possibile modificare il progetto per abilitare questa autorizzazione. I passaggi seguenti descrivono come abilitare l'attendibilità totale:

  1. In Visual Studio aprire le proprietà del progetto.

  2. Nella scheda Sicurezza selezionare l'opzione Questa è un'applicazione attendibile completa .

Questa impostazione apporta le modifiche seguenti:

  • Nel file di progetto il valore dell'elemento <TargetZone> viene modificato in Custom.

  • Nel manifesto dell'applicazione (app.manifest) viene aggiunto un Unrestricted="true" attributo all'elemento 'PermissionSet .

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

Implementazione di un Full-Trust XBAP

Quando si distribuisce un XBAP con attendibilità totale che non segue il modello clickOnce Trusted Deployment, il comportamento quando l'utente esegue l'applicazione dipenderà dall'area di sicurezza. In alcuni casi, l'utente riceverà un avviso quando tenta di installarlo. L'utente può scegliere di continuare o annullare l'installazione. La tabella seguente descrive il comportamento dell'applicazione per ogni zona di sicurezza e le operazioni da eseguire affinché l'applicazione riceva l'attendibilità totale.

Area di sicurezza Comportamento Ottenere l'attendibilità totale
Computer locale Attendibilità totale automatica Non è necessaria alcuna azione.
Siti Intranet e fidati Richiedi attendibilità totale Firmare XBAP con un certificato in modo che l'utente visualizzi l'origine nel prompt.
Internet Errore con "Attendibilità non concessa" Firmare l'XBAP con un certificato.

Annotazioni

Il comportamento descritto nella tabella precedente riguarda gli XBAP con attendibilità totale che non seguono il modello clickOnce Trusted Deployment.

È consigliabile usare il modello ClickOnce Trusted Deployment per la distribuzione di un XBAP con attendibilità totale. Questo modello consente al tuo XBAP di ottenere automaticamente l'attendibilità totale, indipendentemente dalla zona di sicurezza, in modo che l'utente non venga disturbato. Come parte di questo modello, è necessario firmare l'applicazione con un certificato da un editore attendibile. Per altre informazioni, vedere Panoramica della distribuzione di applicazioni attendibili e Introduzione alla firma del codice.

Considerazioni sulle prestazioni del tempo di avvio di XBAP

Un aspetto importante delle prestazioni XBAP è l'ora di inizio. Se un XBAP è la prima applicazione WPF da caricare, il tempo di avvio a freddo può essere di dieci secondi o più. Questo perché il rendering della pagina di stato viene eseguito da WPF e sia CLR che WPF devono essere avviati a freddo per visualizzare l'applicazione.

A partire da .NET Framework 3.5 SP1, il tempo di avvio a freddo di XBAP viene ridotto visualizzando una pagina di avanzamento non gestita all'inizio del ciclo di distribuzione. La pagina di avanzamento appare quasi immediatamente dopo l'avvio dell'applicazione, perché viene visualizzata dal codice di hosting nativo e viene eseguito il rendering in HTML.

Inoltre, la concorrenza migliorata della sequenza di download di ClickOnce riduce il tempo di avvio fino al dieci percento. Dopo che ClickOnce scarica e convalida i manifesti, viene avviato il download dell'applicazione e l'indicatore di stato inizia ad aggiornare.

Vedere anche