Panoramica delle applicazioni browser XAML di WPF

Le XAML browser applications (XBAPs) combinano le funzionalità delle applicazioni Web e delle applicazioni rich client. In modo analogo alle applicazioni Web, le applicazioni XBAP possono essere distribuite in un server Web e avviate da Internet Explorer o Firefox. Come le applicazioni rich client, le applicazioni XBAP possono trarre vantaggio dalle funzionalità di WPF. Anche 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.

In questo argomento sono incluse le sezioni seguenti:

  • Creazione di una nuova applicazione browser XAML (XBAP)

  • Distribuzione di un'applicazione XBAP

  • Comunicazione con la pagina Web host

  • Considerazioni sulla sicurezza delle applicazioni XBAP

  • Considerazioni sulle prestazioni dei tempi di avvio di XBAP

Creazione di una nuova applicazione browser XAML (XBAP)

Il modo più semplice per creare un nuovo progetto XBAP consiste nell'utilizzare di Microsoft Visual Studio 2010. Quando si crea un nuovo progetto, selezionare Applicazione browser WPF nell'elenco di modelli. Per ulteriori 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 del progetto XBAP in Microsoft Visual Studio, l'applicazione viene eseguita con le autorizzazioni dell'area Internet e pertanto vengono generate eccezioni di sicurezza in caso di autorizzazioni di livello superiore. Per ulteriori informazioni, vedere Sicurezza (WPF) e Sicurezza con attendibilità parziale in WPF.

NotaNota

Se per lo sviluppo non si utilizza Microsoft Visual Studio o se si desiderano ulteriori informazioni sui file di progetto, vedere Compilazione di un'applicazione WPF (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 utilizzate da ClickOnce per distribuire l'applicazione e presenta l'estensione xbap.

Le applicazioni XBAP vengono distribuite in un server Web, ad esempio Microsoft Internet Information Services (IIS) 5.0 o versioni successive. Non è necessario installare .NET Framework nel server Web, mentre è necessario registrare i tipi Multipurpose Internet Mail Extensions (MIME) di WPF e le estensioni dei file. Per ulteriori informazioni, vedere Procedura: 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 del file con estensione xbap, in ClickOnce vengono gestite automaticamente le operazioni di download e di 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>A page with frames.</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 questi casi, è possibile rimuovere la versione memorizzata nella cache utilizzando il comando Mage (installato con Visual Studio o Windows SDK) dal 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 dell'applicazione 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, è possibile recuperare 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 (la pagina potrebbe essere in inglese) 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 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();
}

Debug di applicazioni XBAP che utilizzano HostScript

Se l'applicazione XBAP utilizza l'oggetto HostScript per comunicare con la finestra HTML, esistono due impostazioni che è necessario specificare per avviare 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.

    Verrà visualizzata la finestra di dialogo Impostazioni di sicurezza 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. Scegliere OK.

    Le modifiche avranno effetto dopo il riavvio di Internet Explorer.

Nota di avvisoAttenzione

L'abilitazione di contenuto attivo in Internet Explorer può esporre il computer a rischi.Per ulteriori informazioni, vedere la pagina Funzionalità per la sicurezza e la privacy in Internet Explorer.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 sottoinsieme di elementi WPF supportati nell'area Internet oppure è necessario elevare le autorizzazioni dell'applicazione. Per ulteriori informazioni, vedere Sicurezza (WPF).

Quando si utilizza un controllo WebBrowser nell'applicazione, all'interno di WPF viene creata 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 controllo WebBrowser deve fornire un comportamento simile a quello del browser host, incluse le restrizioni di sicurezza. È possibile controllare alcune di queste restrizioni di sicurezza tramite le impostazioni di sicurezza di Internet Explorer. Per ulteriori informazioni, vedere Sicurezza (WPF).

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

  • L'input avviene in un thread separato da WPF WebBrowser, pertanto non è possibile intercettare l'input della tastiera 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 in quanto HwndHost non può creare una sottoclasse di 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) un attributo Unrestricted="true" viene aggiunto 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 al momento dell'installazione. L'utente potrà scegliere se continuare o annullare l'installazione. Nella tabella che segue viene descritto il comportamento dell'applicazione per ogni area di sicurezza e le azioni necessarie relative all'applicazione per acquisire attendibilità totale.

Area di sicurezza

Comportamento

Acquisizione di attendibilità totale

Computer locale

Attendibilità totale automatica

Nessuna azione necessaria.

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

Firmare l'applicazione XBAP con un certificato.

NotaNota

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 ulteriori informazioni, vedere Cenni preliminari sulla distribuzione di applicazioni attendibili e Introduzione alla firma del codice.

Considerazioni sulle prestazioni dei tempi di avvio di 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.

Quando l'avvio viene eseguito in .NET Framework 3.5 SP1, i tempi di avvio a freddo vengono ridotti mediante la visualizzazione di 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. 

La concorrenza migliorata della sequenza di download di ClickOnce migliora inoltre i tempi di avvio del 10%. Dopo il download di ClickOnce e la convalida dei manifesti, vengono avviati il download dell'applicazione e l'aggiornamento dell'indicatore di stato.

Vedere anche

Concetti

Procedura: configurare Visual Studio per eseguire il debug di un'applicazione browser XAML in grado di chiamare un servizio Web

Distribuzione di un'applicazione WPF (WPF)