HttpHandler per XAP non registrato in IIS

di Alessio Leoncini, in Silverlight 2.0,

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>

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi