#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
-
HTML 5 vs RIA? Niente di nuovo
-
#67 - RadioButton style animato per Silverlight 3.0
-
Il SP2 di Windows Vista e Windows Server 2008 arriva alla RC
-
Disponibile il Silverlight Toolkit March 2009 Release
-
L'alternativa a Web Forms: ASP.NET MVC
-
Supporto audio e video in Silverlight 3.0
-
Windows XP mode per #win7 in RC http://u.aspitalia.com/5
-
Disponibile Microsoft Expression Studio 3
-
MetadataDiffViewer: differenze tra i framework
-
#53 - Uno screensaver in Silverlight 2.0
-
Speciale Siverlight 3.0 beta 1: primo contatto
-
#976 - ASP.NET ed Entity Framework: query di filtro ed ordinamento con EntityDataSource

















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