Un paio di breaking changes di IE7 (che non riguardano solo la programmazione per il web)

In questi giorni ho dovuto mettere le mani su un "vecchio" sistema costituito da alcuni webservice erogati da servlet jsp e da un'applicazione vb6 che comunica con i servizi remoti tramite un oggetto Inet (e quindi, sotto sotto, tramite le librerie messe a disposizione da Internet Explorer).

Il motivo dell'intervento era dato dal fatto che, installando IE7 nei pc in cui girava l'applicativo lato client, si ottenevano dei malfunzionamenti in un paio di punti dell'applicazione: nel caso servissero anche a qualcun altro, riporto qui le soluzioni.

  • Problema di timeout (errore 12002):
    Internet Explorer 7 ha un tempo di attesa delle risposte inferiore rispetto a quello di default delle versioni precedenti (IE7 ha 30 secondi di timeout, non so di preciso il valore per le versioni precedenti).
    In questo caso, capitava che il programma vb richiedeva un servizio all'applicativo remoto, ma questo impiegava più di 30 secondi a ritornare i risultati, così si aveva un errore di timeout (mentre con IE6 tutto aveva sempre funzionato bene).
    Per risolvere il problema, dato che l'oggetto Inet ha una proprietà RequestTimeout che non è influente in questo caso, bisogna aggiungere un valore di tipo DWORD chiamato ReceiveTimeout alla chiave di registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings . Il valore di questa chiave è espresso in millisecondi; una volta impostato, occorre riavviare prima di vederlo in azione (ulteriori info qui: http://support.microsoft.com/?scid=kb%3Ben-us%3B181050&x=15&y=11)
  • Problema nel contenuto di un file (byte 'troncati'):
    la solita applicazione vb richiedeva un servizio all'applicazione remota di java, e questa restituiva il risultato sotto forma di file costituito da alcuni byte: con IE6, il file restituito era quello corretto da 93 byte (di cui 92 effettivi ed 1 di crc, aggiunto dall'applicativo java), mentre con IE7 venivano restituiti solamente 92 byte.
    Passando la richiesta tramite firefox (inserendo a mano l'url del servizio richiesto), anche qui il file restituito era da 93 byte, come atteso.
    Analizzando il traffico HTTP tramite Fiddler, ho notato che in realtà anche da IE7 il contenuto dei dati ricevuto era da 93 byte, ma nell'intestazione HTTP il Content-Length era impostato a 92.
    In breve, guardando il codice dell'applicativo Java che generava questo file, ho scoperto che il bug risiedeva in esso (il Content-Length veniva impostato a 92 byte e non a 93, chi ha scritto il codice si era dimenticato di aggiungere la lunghezza del byte di crc), ed IE7 non faceva altro che considerare il Content-Length passato (e a rigor di logica, il suo comportamento sarebbe anche il più corretto), mentre evidentemente IE6 e Firefox considerano la lunghezza dei dati ricevuti e non tanto l'intestazione HTTP relativa.

DotNetMarche: hosting nuovo, sito nuovo (con Community Server 2007)

Come accennato da Diego, in questi giorni, per DotNetMarche abbiamo cambiato fornitore di hosting (per risolvere i problemi, principalmente prestazionali, di cui si era discusso qui http://forum.ugidotnet.org/thread.asp?m=64286 ...forse siamo stati sfortunati noi, ma webhost4life, di cui molti parlano bene, a noi andava piuttosto lento).
Dato che da alcuni giorni è uscito anche Community Server 2007, ne abbiamo approfittato per aggiornare il sito...anche se si è trattato non solo di un semplice update!

Capitolo Hosting

Alla fine per l'hosting abbiamo scelto come soluzione AspNix...non sembra male come rapporto qualità / prezzo, le prestazioni sembrano essere buone, per quello che abbiamo testato finora. Rispetto a webhost4life, però, ha purtroppo alcune limitazioni per la gestione dei siti: utilizzano un pannello di controllo 'preconfezionato', Helm, nella versione 3.x, carente in molte funzionalità, che non possono essere eseguite automaticamente. Per esempio, non è possibile effettuare un restore o un backup di un database in automatico, nè tantomeno uno zip / unzip di un file o di una directory: per tutte queste operazioni, è necessario aprire un ticket di assistenza, descrivendo l'operazione richiesta, ed al solito possono passare anche alcune ore prima che l'operatore la esegua.
Inoltre, si hanno alcuni limiti nella possibilità di configurare IIS: ad esempio, mentre in WB4L si potevano creare dei sotto-domini che puntavano ad una qualsiasi directory del sito, in AspNix il pannello di controllo permette di creare solamente sotto-domini che puntano ad una directory situata direttamente sotto la wwwroot, e non a directory situati in livelli più nidificati. Anche in questo caso è possibile a volte richiedere l'intervento dei tecnici, per fare delle variazioni manuali: loro le eseguono, ma ti dicono anche che Helm, non supportandole, magari un giorno potrebbe creare problemi.

Rispetto a webhost4life, inoltre, ho notato facendo delle prove che per i webservice si ha una CAS con meno privilegi, un Medium Trust al posto di Full: facendo delle prove su un mio webservice (non di Community Server), generava un'eccezione relativa ai permessi in fase di deserializzazione binaria di un DataSet, operazione non ammessa con quei privilegi. Anche qui contattando il supporto tecnico ci si può far assegnare maggiori privilegi, se necessario.

Una cosa positiva di AspNix è quella di poter aprire un hosting con durata mensile, così si possono fare delle prove reali spendendo pochissimo, e successivamente si può converire l'hosting in annuale.

Capitolo Community Server 2007

Il passaggio alla nuova versione di Community Server (il sito precedente era basato sulla versione 2.x) non è stato proprio immediato, soprattutto per la gestione completamente nuova dei temi, ora basati sulle MasterPage.
Invece di aggiornare il sito sovrascrivendo i file già esistenti dalla precedente versione di CS con i nuovi della 2007, abbiamo preferito ricominciare da capo, cioè ricreare il sito partendo dai file originali della versione 2007 e applicandogli tutte le modifiche necessarie in modo da reintegrate le parti customizzate nel nuovo modello dei temi.

Per chiunque fosse interessato alla personalizzazione di CS2007 (sia per effettuare la migrazione dalle versioni precedenti, sia per creare un nuovo sito), abbiamo raccolto in un documento tutti gli step eseguiti per customizzare il sito di DotNetMarche secondo le nostre necessità, e messo a disposizione i file modificati, così si possono vedere i vari script applicati...grazie ad esso, sicuramente si può risparmiare un po' di tempo per implementare alcune funzionalità (es. il menù a tendina), la cui documentazione è spesso sparpagliata tra i vari blog e forum di CS.

Il tutto è disponibile nel repository svn che utilizziamo in DotNetMarche, ospitato su Google Code.

Tra le caratteristiche più interessanti di CS2007 possiamo elencare:

  • la nuova gestione dei temi, che abbiamo sfruttato per una maggiore integrazione delle pagine personalizzate con il resto del sito (es. in http://dotnetmarche.org/eventi/default.aspx)
  • i file di configurazione (ad esclusione del web.config) possono essere modificati utilizzando i file '_override', cioè creando un file parallelo all'originale e apportando ad esso le modifiche.
  • la possibilità di realizzare il menù a tendina per la NavigationBar (si è dovuto lavorare con un po' di codice per ottenere ciò)

 

In definitiva, la versione di CS2007 attuale non ha caratteristiche funzionali sconvolgenti rispetto alla 2.x (a parte la gestione dei temi), ma per i prossimi mesi sono previsti due aggiornamenti (http://communityserver.org/blogs/announcements/archive/2007/05/02/hawaii.aspx) che porteranno nuove features.

Nuove funzionalità del sito

Oltre al restyling del sito DotNetMarche, abbiamo aggiunto qualche funzionalità.

La più importante è sicuramente la gestione dei blog, in cui è prevista sia la possibilità di aprirne uno direttamente su DotNetMarche a richiesta, sia di aggregare in un unico contenitore i blog degli utenti di DotNetMarche che li hanno già aperti su altri siti (UGIdotNet, devleap, ...)...qui tutte le info!.

Inoltre, abbiamo creato una pagina per mettere in evidenza i progetti Open Source a cui collaborano gli utenti di DotNetMarche.

Licenza Community Server 2007

Una nota particolare riguarda la licenza di Community Server: per gli user group che trattano di .Net, come il nostro, è possibile avere una licenza di tipo 'Professional' gratuitamente, basta scrivere al reparto vendite di Community Server.

Ma le sorprese non finiscono qui: la licenza Professional, secondo quanto descritto nella sua pagina ufficiale, ha dei limiti sul numero di blog e forum gestibili (100). In realtà, dal nostro sito, quando inseriamo il codice della licenza, ci indica che corrisponde ad una Professional, ma con numero di blog e siti illimitato...abbiamo scritto al reparto vendite per far luce su questa cosa (magari per gli user group .net le licenze sono illimitate?), ma ancora non ci hanno risposto...vedremo!