Panoramica delle applicazioni browser XAML di WPF

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 applicazioni XBAP è simile allo sviluppo di applicazioni rich client. In questo argomento viene fornita un'introduzione semplice e dettagliata allo sviluppo di applicazioni XBAP e vengono illustrate le differenze esistenti tra lo sviluppo di questo tipo di applicazioni e lo sviluppo di applicazioni rich client standard.

Avviso

Gli XBAP richiedono il funzionamento dei browser legacy, ad esempio Internet Explorer e Firefox. Queste versioni precedenti del browser sono in genere non supportate 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.

Questo argomento include 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 nell'elenco di modelli. Per altre informazioni, vedere Procedura: creare un nuovo progetto di applicazione browser WPF.

Quando viene eseguito, 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 ulteriori informazioni, vedere Sicurezza e Sicurezza con attendibilità parziale in WPF.

Nota

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'applicazione XBAP

Quando si compila un'applicazione XBAP, nell'output sono inclusi i tre file seguenti:

File Descrizione
Eseguibile (con estensione exe) Contiene il codice compilato e ha un'estensione exe.
Manifesto dell'applicazione (con estensione manifest) Contiene i metadati associati all'applicazione e ha un'estensione manifest.
Manifesto di distribuzione (con estensione 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 ulteriori informazioni, vedere Configurare IIS 5.0 e IIS 6.0 per distribuire applicazioni WPF.

Per preparare l'applicazione XBAP per la distribuzione, copiare il file con estensione exe e i file manifesto associati nel server Web. Creare una pagina HTML contenente un collegamento ipertestuale per aprire il manifesto di 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. Nel codice di esempio seguente viene illustrata una pagina HTML contenente un collegamento ipertestuale che punta a un'applicazione XBAP.

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

È inoltre possibile ospitare un'applicazione 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 di distribuzione. Se per la comunicazione tra la pagina Web di hosting e l'applicazione XBAP si desidera utilizzare il meccanismo incorporato, sarà necessario ospitare l'applicazione in un frame. Nel codice di esempio seguente viene illustrata una pagina HTML con due frame in cui l'origine per il secondo frame viene impostata su un'applicazione 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 applicazioni XBAP memorizzate nella cache

In alcuni casi, dopo aver ricompilato e avviato l'applicazione XBAP, è possibile che ci accorga che è aperta una versione precedente dell'applicazione XBAP. Questa situazione può ad esempio verificarsi quando il numero di versione dell'assembly XBAP è statico e l'applicazione XBAP viene avviata dalla riga di comando. In questo caso, poiché il numero della versione memorizzata nella cache (quella avviata in precedenza) e quello della nuova versione coincidono, la nuova versione dell'applicazione XBAP non viene scaricata. Al contrario, viene 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. L'esecuzione del comando seguente determina la cancellazione della cache dell'applicazione.

Mage.exe -cc

L'esecuzione di questo comando garantisce che venga avviata la versione più recente dell'applicazione XBAP. Quando si esegue il debug dell'applicazione in Visual Studio, deve essere avviata la versione più recente di XBAP. In generale, è necessario aggiornare il numero di versione della distribuzione a ogni compilazione. Per ulteriori informazioni sul comando Mage, vedere Mage.exe (Strumento per la generazione e la modifica di manifesti).

Comunicazione con la pagina Web host

Quando l'applicazione è ospitata in un frame HTML, è possibile comunicare con la pagina Web che contiene l'applicazione XBAP. A tale scopo, recuperare la HostScript proprietà 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 utilizzando la normale sintassi del punto. È inoltre possibile accedere a metodi di script e 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 applicazioni XBAP che utilizzano 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 disporre dell'accesso al sito di origine ed è necessario avviare l'applicazione con la pagina HTML che contiene l'applicazione XBAP. Nei passaggi seguenti viene descritto 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. Verificare che la casella di controllo Concedi all'applicazione accesso al proprio sito di origine sia selezionata, quindi fare clic su OK.

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

  5. In Internet Explorer fare clic su Strumenti, 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 di contenuto attivo in file in Risorse del computer.

  8. Fare clic su OK.

    Le modifiche avranno effetto dopo il riavvio di Internet Explorer.

Attenzione

L'abilitazione di contenuto attivo in Internet Explorer può esporre il computer a rischi. 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 delle applicazioni XBAP

Le applicazioni XBAP vengono in genere eseguite in una sandbox di sicurezza con attendibilità parziale limitata al set di autorizzazioni dell'area 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 Sicurezza.

Quando si usa un WebBrowser controllo nell'applicazione, WPF crea internamente un'istanza del controllo ActiveX WebBrowser nativo. Quando l'applicazione è un'applicazione XBAP con attendibilità parziale in esecuzione in Internet Explorer, il controllo ActiveX viene eseguito in un thread dedicato del processo Internet Explorer. Vengono pertanto applicate le limitazioni seguenti:

  • Il WebBrowser controllo deve fornire un comportamento simile al browser host, incluse le restrizioni di sicurezza. È possibile controllare alcune di queste restrizioni di sicurezza tramite le impostazioni di sicurezza di Internet Explorer. Per altre informazioni, vedere Sicurezza.

  • Viene generata un'eccezione quando un'applicazione XBAP viene caricata 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.

  • È possibile che la temporizzazione o l'ordine di navigazione risulti diverso a causa del controllo ActiveX in esecuzione in un altro thread. Ad esempio, la navigazione a una pagina non viene sempre annullata dall'avvio di un'altra richiesta di navigazione.

  • Un controllo ActiveX personalizzato può causare problemi alla comunicazione dal momento che l'applicazione WPF è in esecuzione in un thread separato.

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

Creazione di un'applicazione XBAP con attendibilità totale

Se per l'applicazione XBAP è richiesta l'attendibilità totale, è possibile modificare il progetto per abilitare questa autorizzazione. Nei passaggi seguenti viene descritto come abilitare l'attendibilità totale:

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

  2. Nella scheda Sicurezza selezionare l'opzione È un'applicazione completamente attendibile.

Questa impostazione determina le modifiche seguenti:

  • Nel file di progetto il valore dell'elemento <TargetZone> viene impostato su 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" />
    

Distribuzione di un'applicazione XBAP con attendibilità totale

Quando si distribuisce un'applicazione XBAP con attendibilità totale che non segue il modello di distribuzione attendibile di ClickOnce, il comportamento che si ottiene quando l'utente esegue l'applicazione dipenderà dall'area di sicurezza. In alcuni casi, l'utente riceverà un avviso quando tenta di installare il codice. L'utente potrà scegliere se continuare o annullare l'installazione. La tabella seguente descrive il comportamento dell'applicazione per ogni area di sicurezza e le azioni necessarie relative all'applicazione per acquisire attendibilità totale.

Area di sicurezza Comportamento Ottenere l'attendibilità totale
Computer locale Attendibilità totale automatica Non è richiesto alcun intervento.
Intranet e siti attendibili Richiesta di attendibilità totale Firma dell'applicazione XBAP con un certificato in modo che l'utente veda l'origine nel prompt.
Internet Esito negativo con "Attendibilità non concessa" Firma dell'applicazione XBAP con un certificato.

Nota

Il comportamento descritto nella tabella precedente è relativo alle applicazioni XBAP con attendibilità totale che non seguono il modello di distribuzione attendibile di ClickOnce.

Per la distribuzione di un'applicazione XBAP con attendibilità totale, si consiglia di utilizzare il modello di distribuzione attendibile di ClickOnce. Quando si utilizza questo modello, all'applicazione XBAP viene concessa automaticamente l'attendibilità totale indipendentemente dall'area di sicurezza e all'utente non viene visualizzata alcuna richiesta. Come parte di questo modello, è necessario firmare l'applicazione con un certificato di un editore attendibile. Per altre informazioni, vedere Cenni preliminari sulla distribuzione di applicazioni attendibili e Introduzione alla firma del codice.

Considerazioni sulle prestazioni dei tempi di avvio delle applicazioni XBAP

Un aspetto importante delle prestazioni di applicazioni XBAP riguarda i tempi di avvio. Se un'applicazione XBAP è la prima applicazione WPF da caricare, i tempi di avvio a freddo possono essere pari a dieci o più secondi. Questa situazione si verifica perché il rendering della pagina di avanzamento viene eseguito da WPF e per visualizzare l'applicazione, CLR e WPF devono essere avviati a freddo.

A partire da .NET Framework 3.5 SP1, l'ora di avvio a freddo XBAP viene mitigata visualizzando una pagina di avanzamento non gestita all'inizio del ciclo di distribuzione. La pagina di avanzamento viene visualizzata subito dopo l'avvio dell'applicazione, in quanto viene visualizzata da codice ospitato in maniera nativa ed eseguendone il rendering in HTML.

Inoltre, la concorrenza migliorata della sequenza di download ClickOnce migliora l'ora di inizio fino al 10%. Dopo che ClickOnce scarica e convalida i manifesti, viene avviato il download dell'applicazione e l'indicatore di stato inizia ad aggiornare.

Vedi anche