Ci sono alcune cose che, per quanto ASP.NET 2.0 con il suo DefaultHttpHandler ed IIS 6.0 possano tentare di garantire, solo l'accoppiata ASP.NET 3.5+IIS 7.0 riescono a portare egregiamente a termine. Fermo restando che ASP.NET 3.5 è prettamente un nome "marketing" dato ad ASP.NET 2.0+SP1+alcune funzionalità che in realtà sono marginali rispetto a quello che mi pongo di fare in questo caso.
Siccome ormai ho capito che nella vita le cose più assurde toccano a me :), in questi giorni ho finito un progettino che avevo cominciato, se non ricordo male, ai primi Community Days e poi avevo abbandonato per manca di tempo, aiutato dal fatto che la voce l'ho lasciata a qualche centinaio di km da casa e quindi posso stare più a scrivere e meno al telefono rispetto al solito.
Ad ogni modo, fermo restando che alcune cose sono possibili anche usando IIS 6.0+ASP.NET 2.0 e che io non le userei mai in produzione per il semplice fatto che l'integrated pipeline di IIS 7.0 ha performance che non sono nemmeno lontanamente paragonabili a quelle della pipeline classica, che ripete sia per la parte managed che per quella unmanaged le stesse identiche operazioni, il risultato è molto interessante.
Quello che IIS 7.0 consente è molto più bello, performante ed integrato. E se lo provate sotto IIS 6.0, semplicemente riceverete una bella PlatformNotSupportedException, nel caso specifico.
Siccome il team ha "sganciato" quelli che sono chiamati gli Application Services, cioè Membership, Roles e Profile API, per renderli disponibili via AJAX, WCF o anche WinForms, WPF o quello che vi pare, per integrare queste informazioni in ambiti diversi, sulla scia di un paio di progetti per altrettanti clienti, ho provato a fare lo stesso per la parte "legacy" di un'applicazione, coadiuvato dal fatto che ora c'è la possibiltà di scrivere nelle Header della richiesta e quindi recuperarle da, ad esempio, Classic ASP o PHP, JSP, Python, CGI e chissà cos'altro.
Per cui ho fatto una bella solution con la mia FormsAuthentication, Membership, Roles e Profile API attivate, ho creato un semplice HttpModule che nell'evento BeginRequest dell'applicazione scrive nele header quello che mi serve prima che arrivi al vero Handler la palla. Ed il risultato è questo:
Le righe di codice che con Classic ASP recuperano il tutto sono le seguenti:
Username: <%=Request.ServerVariables("AUTH_USER") %><br /> Roles from ASP.NET Role API: <% Dim roles roles = Request.ServerVariables("HTTP_Roles") Response.Write(roles) %>
Appena finisco di sistemare un po' di dettagli riguardo Profile API, che è un po' più lungo da sistemare, l'aggiungerò nel lab.
Poi non venite a dirmi che IIS 7.0 in realtà non è 300 mila passi in avanti rispetto alla 6.0 ;)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- ASP.NET 5 e ASP.NET MVC 6: le cose da sapere, il 27 febbraio 2015 alle 09:10
- .NET Framework 4.6, .NET Core 5, ASP.NET 4.6 e ASP.NET 5: un po' di chiarezza, il 13 novembre 2014 alle 10:55
- La lunga strada verso la prossima versione di ASP.NET, il 29 settembre 2014 alle 17:24
- Visual Studio 11 beta: le novità di ASP.NET 4.5, l'1 marzo 2012 alle 19:53
- Inside ModelVirtualCasting #10: tutti pazzi per il web mobile, il 5 luglio 2010 alle 18:47
- Inside ModelVirtualCasting #9: Cache con Windows Server AppFabric, il 2 luglio 2010 alle 12:05