#26 - HttpHandler per XAP non registrato in IIS
di Alessio Leoncini, in Silverlight 2.0, 6 novembre 2008
Archiviato in: ASP.NET, HttpHandler, IIS, Silverlight, Silverlight 2.0, web.config, Windows Client, Windows Server, Windows Vista, XAML
Dopo il rilascio della versione RTW di Silverlight 2.0 è possibile utilizzare il plugin in ambienti di produzione sfruttandone appieno le funzionalità.
Per eseguire l'istanza del plugin nelle pagine è necessario che il webserver abbia l'estensione XAP mappata correttamente al MIME type "application/x-silverlight-app".
Questa operazione deve essere eseguita nel pannello di configurazione del corrispondente webserver, qualora si abbia accesso diretto alla macchina è possibile procedere in autonomia all'operazione, nel caso di ambienti di hosting questa attività deve essere eseguita dagli amministratori di sistema.
Vista la recente release del plugin può capitare che non tutti i mantainer abbiano ancora eseguito questa registrazione, in tal caso in IIS 6.0 è possibile utilizzare lo stesso il plugin realizzando uno specifico HttpHandler:
namespace XAPHandler { public class XAPHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { context.Response.Clear(); string xapName = context.Request.QueryString["xap"]; if (!String.IsNullOrEmpty(xapName)) { string xapFile = String.Format("clientbin/{0}", xapName); string attachment = string.Format("attachment; filename={0}", xapFile); context.Response.ContentType = "application/x-silverlight-app"; context.Response.AddHeader("Content-disposition", attachment); context.Response.TransmitFile(xapFile); } } } }
Come ogni HttpHandler deve essere registrato nel web.config del sito web che ospita l'applicazione Silverlight all'interno del nodo system.web:
<httpHandlers> <add type="XAPHandler.XAPHandler,XAPHandler" verb="GET" path="xap.ashx"/> </httpHandlers>
Nel precedente codice vengono associate le chiamate di uno specifico file "xap.ashx" in modo che siano gestite dalla classe XAPHandler. È necessario utilizzare un tipo di estensione (ashx) che sia già mappata in IIS con una ISAPI di ASP.NET in modo che le richieste di questo tipo di risorse entrino nel ciclo di gestione dell'engine di ASP.NET.
La classe XAPHandler si occupa di recuperare i valori in querystring corrispondenti al nome del file XAP dell'applicazione Silverlight e di aggiungerli al contesto di risposta specificando il corretto ContenType (application/x-silverlight-app). L'istruzione TransmitFile scrive concretamente lo stream del file nell'output di risposta.
Realizzato e registrato l'HttpHandler è possibile istanziare un'applicazione Silverlight con il seguente codice:
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <param name="source" value="xap.ashx?xap=26.xap"/> ...
Per coloro che hanno la possibilità di utilizzare IIS7 su Window Server 2008 possono sfruttare una delle più utili caratteristiche della nuova versione del web server: procedere alla mappatura dell'estensione XAP direttamente nel web.config con la seguente istruzione:
<system.webServer> <staticContent> <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app"/> </staticContent> </system.webServer>
Nota: Questo script contiene un allegato.
Approfondimenti
Microsoft Security Bulletin MS08-067
#38 - Encode di caratteri speciali nello XAML di Silverlight
#33 - Utilizzare font personalizzati in Silverlight 2.0
#49 - HyperlinkButton Template animata in Silverlight 2.0
Disponibile la versione November 2008 del Silverlight Toolkit
Nuovo tipo di contenuti su SilvelightItalia
#31 - Disattivare il tasto destro del mouse
#29 - Personalizzare i controlli di charting di Silverlight 2.0
MailWebEventProvider perche sei public e abstract
#40 - Animazione di un oggetto con traiettoria ellittica in Silverlight 2.0
Anche Windows Server 2008 R2 in beta1
Microsoft Security Bulletin di agosto 2008
Commenti
Se hai letto questo script, indica una preferenza sui suoi contenuti:
Per procedere devi essere autenticato.























Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.