IIS 7 - Web Platform Day

Ieri in Microsoft si è svolto il Web Platform Day, evento dedicato interamente alle novità di IIS 7, ecco il materiale delle mie sessioni. Come vi dicevo potete trovare molti esempi e documentazione sul sito community di IIS 7.

Le slide delle mie sessioni:

1 - Estendere IIS 7

2 - Servizi alle applicazioni

3 - Troubleshooting -codice di esempio

Tools usati:

Fiddler

WCAT(x86)

Estendibilità di IIS 7

IIS 7 offre molto agli sviluppatori che vogliono estenderne le funzionalità. L'architettura di IIS 7 è completamnete modulare e ogni modulo in IIS 7 è fatto sfruttando API pubbliche. Questo vuol dire almeno due cose: la prima che ogni modulo di IIS 7 può essere rimosso o aggiunto solo se effettivamente necessario: non mi serve il modulo che implementa l'autenticazione Basic, bene lo rimuovo. La seconda è che posso scrivere un modulo sfruttando queste API pubbliche, cioè le stesse usate dal team di sviluppo per realizzare un modulo di IIS7.

Moduli in .NET

Ad esempio posso fare un modulo scritto in .NET per la Basic Authentication. In sostanza possiamo realizzare un modulo in C# implementando l'interfaccia IHttpModule, come si faceva con ASP.NET, ma avendo a disposizione più eventi e più collezioni che possiamo sfruttare per fare ciò che con un semplice modulo in ASP.NET non era possibile: ad esempio implementare un modulo di autenticazione custom che sostituisca quello della basic auth di IIS. Qui trovate il codice di esempio e le istruzioni passo-passo dell'esempio di ieri. Chi come me si è spesso trovato nella situazione di dover implementare un ISAPI filter in C++ lo apprezzerà particolarmente :-)

Schema di un generico Modulo che si registra per due venti della pipeline di IIS:

image

Dove si configura nella nuova IIS Manager:

image

Estensione della configurazione di IIS7 e Handler in .NET

Non solo moduli (che intervengono ad ogni richiesta http) ma possiamo sviluppare anche handler in .NET (che intervengono per richieste a specifiche estensioni, ad esempio tutte le volte che chiamo un'immagine jpg). Nell'esempio della sessione di ieri ho fatto vedere un po' di cose:

  • come estendere il sistema di configurazione di IIS, aggiungendo un file xml alla directory degli schemi di IIS 7, dove trovate anche come è definito il file applicationHost.Config. Questo schema serve a definire delle proprietà che saranno poi configurabili nel file web.config o nel file applicationHost.config e che verranno lette dall' handler dell'esempio.
  • L'handler dell'esempio usa le impostazioni lette dal file web.config per configurarsi. Per leggere tali informazioni bisogna usare la dll Microsoft.Web.Administration.
  • L'handler interviene per ogni richiesta fatta ad un' immagine jpeg, la processa aggiungendo un testo in sovraimpressione e la restituisce al client. Il testo viene appunto letto dal file web.config di configurazione e rispecchia lo schema definito in precedenza.

Esempio di schema file per la modifica della configurazione

image

Abilito nel file applicationHost.config lo schema definito:

image

Questo permette di avere la possibilità di scrivere un file web.config in cui posso aggiungere il tag xml imageCopyright ( nell'esempio avevo già anche configurato l'handler)

image

La struttura del codice dell' handler è la seguente:

image

In giallo trovate ciò che serve per fare il telaio di un handler, mentre in verde un esempio dell'uso delle API per accedere alla configurazione estesa di IIS.

Estensione della UI della nuova IIS 7 Manager

Sarebbe bello a questo punto poter modificare le impostazioni della configurazione (attributi enable, message, color) invece che andando a modificare a mano il file web.config facendolo dalla console di IIS 7. Questo è possibile creando una dll .NET da copaire in GAC e da configurare opportunamente nel file administration.config. Questo è il file che la IIS manger legge quando viene caricata. Dopo questa operazione la nostra console si prensenterà come in figura

image image

A  questo link trovate descritto in modo molto dettagliato l'esempio completo, che parte dall'estensione dello schema di IIS7, la creazione dell' Handler e quindi l'estensionde della UI di IIS Manger.

 

Servizi alle applicazioni

In questa sessione abbiamo visto come utilizzare servizi che prima erano disponibili solo per ASP.NET (Form Autentication, Url Autorization e Output Cache) con contenuti di diverso genere: dalle pagine statitche perfino ad applicazioni PHP. La procedura per utilizzare questi servizi può essere fatta dalla console di IIS, accedendo alle relative sezioni:

image

Rimando alla registrazione dell'evento quando sarà disponibile per vedere una demo completa.

In particolare per le applicazioni PHP ho mostrato come configurare FastCGI per IIS 7.Molte delle applicazioni fatte per IIS sfuttano a fondo il modello multi-thread offerto dal IIS stesso.  Anche se PHP supporta il multi-thread, molte delle estensioni a PHP non sono thread-safe. Questo portava  in passato a dover usare CGI come modello per far girare le applicazioni in modo affidabile su Windows, che però comporata un evidente degrado in termini di performance. FastGCI salva "capra e cavoli" consentendo di avere sia performance che affidabilità. Per maggiori dettagli su CGI/ISAPI e FastCGI partite da qui.

La configurazione di Fast CGI è molto semplice basta configurare un Handler come segue:

image

image

 

Troubleshooting

La sessione che è stata tenuta da Piergiorgio, mi ha visto nella conclusione far vedere un paio di demo interessanti. Il nuovo sistema di Trace di IIS7 consente infatti di configurare delle regole per tracciare situazioni critiche e di effettuare la trace solo in quella specifica situazione, ad esempio:

  • tracciare le richieste che ci mettono più di 10 secondi ad essere processate
  • tracciare tutte le richieste che restituiscono come codice di errore 500.

E' inoltre possibile integrare le trace delle proprie applicazioni IIS (ad esempio un modulo) e vederle integrate nella pipeline di esecuzione di IIS 7. Qui trovate un esempio descritto in modo completo. Il risultato è un file che può essere aperto con un browser che mostra tra le altre informazioni le seguenti, giusto per avere un'idea:

image

Concludendo

Molto di nuovo per gli sviluppatori (e non solo) in IIS 7,spero che l'evento sia stato di utilità per tutti e a chi c'era grazie della parteciapzione. Se volete potete scaricare la RC1 di Windows Server 2008 per fare qualche prova con IIS 7, certo se avete Windows Vista lo potete già fare :-).

Ciao

-Pietro