ASP .NET

[ASP .NET] How to access Request data when HttpContext.Current.Request is unavailable

What happened if you need to access the HttpRequest object whitin the event Application_Start of an ASP .NET Web Application ? Response: you end up with an exception like this: Someone might observe that such event is not a valid place for a task like that, but sometimes things are simply different from those that appear at first sight. So, if you want to get for example the virtual path or the physical path of a web application before the HttpRequest object is constructed  this is a valid solution: ...

posted @ Thursday, October 03, 2013 10:11 PM | Feedback (0)

L’evento page load è eseguito 2 volte

Convertire un progetto ASP .NET dalla versione 1.1 ad una versione successiva del .NET Framework nasconde un inconveniente a cui occorre porre rimedio manualmente. L'inconveniente è dovuto alla introduzione delle partial class a partire dalla versione 2.0 del .NET Framework, in contrapposizione al codice generato dal designer nella versione 1.1. Questo fa si che importando il codice sorgente nella nuova versione utilizzata ci si ritrovi, ad esempio, con un event handler come questo nel metodo InitializeComponent 1: private void InitializeComponent() 2: { 3: this.Load += new System.EventHandler(this.Page_Load); 4:...

posted @ Monday, March 15, 2010 6:21 AM | Feedback (0)

ASP .NET 4.0 #3 Ciò che non è cambiato

ASP .NET 4.0 è ormai alle porte, con la versione beta è possibile scoprire le novità  rispetto alla versione precedente, e non sono certamente poche, ma a livello di controlli lato server ce ne sono alcuni praticamente immutati rispetto alle precedenti versioni. Mi riferisco ad esempio al controllo Http File Upload, rimasto identico nelle varie versioni di ASP .NET che si sono succedute. Questo controllo soffre di qualche problema e non è certo il massimo in ottica web 2.0, ovvero su siti dove è richiesto una elevata user experience. A meno di non utilizzare un controllo di terze parti probabilmente a pagamento, occorre fare i...

posted @ Monday, March 15, 2010 6:19 AM | Feedback (5)

L’evento Application_Start ed il suo corretto utilizzo

Regola importante in una applicazione ASP .NET: durante l'evento Application_Start dovrebbero essere assegnate solo variabili statiche e mai variabili d'istanza; ciò è dovuto al fatto che questo evento viene sollevato solo 1 volta durante il ciclo di vita dell'applicazione e, insieme all'evento Application_End, non è legato alla istanza in esecuzione della classe HttpApplication ma, al contrario, entrambi sono considerati eventi speciali. Infatti, ogni applicazione ASP .NET in esecuzione è associata ad un oggetto HttpApplication, capace di gestire una richiesta alla volta. Durante il suo ciclo di vita possono essere create più istanze della classe HttpApplication, ognuna delle quali in ottica di ottimizzazione delle performance...

posted @ Monday, March 15, 2010 6:04 AM | Feedback (0)

ASP .Net e i thread secondari

Interessantissimo post di Stefano Pronti del nuovo blog MSDN di Supporto Tecnico agli Sviluppatori, che spiega le disastrose conseguenze di non richiamare il metodo Dispose su risorse unmanaged, utilizzate all'interno di una web application. Per farla breve, le risorse unmanaged utilizzavano un thread secondario rispetto a quello che prende in carico la web request, ed in questo thread secondario veniva sollevata una eccezione non gestita durante la fase di finalizzazione del garbage collector, che, come è noto, viene eseguito in un thread diverso. In questo caso il comportamento di ASP .NET a partire dalla versione 2.0 è quello di interrompere...

posted @ Monday, September 28, 2009 8:24 AM | Feedback (0)

HttpResponse.ApplyAppPathModifier

Se si usano le sessioni ASP .NET coockieless, ovvero sessioni in cui il SessionID viene inserito nell'url nella seguente forma: /App/(S(avsbnbml2n1n5mi5rmfqnu65))/default.aspx il metodo ApplyAppPathModifier della classe HttpResponse risulta estremamente utile, poichè, passandogli come parametro stringa un path virtuale, restituisce lo stesso path con il SessiondID inserito correttamente nell'url, sollevando lo sviluppatore dalla costruzione manuale dello stesso. Ciò risulta evidente ogni qual volta è necessario utilizzare url caricati dinamicamente.

posted @ Tuesday, January 27, 2009 3:00 PM | Feedback (0)

IIS ASP .NET Tab missing

Vi è mai capitato che nella console di amministrazione di IIS per una certa web application sparisse il tab ASP .NET senza apparente motivo ? A me sì, con tutte le conseguenze del caso, e senza che riuscissi a trovare una soluzione nei forum e user group. Ora finalmente la soluzione esiste. E' spiegata in modo dettagliato in questo post, ed inoltre, come afferma l'autore del post, non esiste nessuna soluzione immediata che pone riparo a questa anomalia. 

posted @ Wednesday, June 11, 2008 5:54 AM | Feedback (0)

Messaggio di errore Ambiguous match found e httpParseException

Scenario: web application che utilizza la versione 1.1 di ASP .NET migrata direttamente alla versione 3.5. Dopo la migrazione su una delle pagine ASPX viene sollevato una HttpParseException durante il caricamento della stessa. L'eccezione in questione, come si evince dal nome, viene generata dal runtime di ASP .NET quando il parsing di una pagina ASPX fallisce a runtime. Il messaggio di errore recita "Ambiguous match found", e quindi non aiuta granchè. La cosa curiosa è che l'eccezione non si verifica in ambiente di sviluppo ma solo sulla versione di deploying dell'applicazione, quindi non è "debuggabile" in Visual Studio 2008 ( a meno di non effettuare un debug in...

posted @ Monday, March 17, 2008 9:58 AM | Feedback (0)

Partial rendering troubleshooting

Regola importante: l'update parziale di una pagina ASP .NET 2.0 (o successivi) attraverso l'UpdatePanel di Ajax non funziona in presenza di questo tag nel file di configurazione dell'applicazione (o nel machine.config): <xhtmlConformance mode="Legacy"/> Infatti, con questa impostazione la proprietà "SupportPartialRendering" dell'oggetto ScriptManager ritorna il valore false. Il tag in questione imposta la modalità di rendering dei controlli, es.:  in modalità compatibile XHTML (mode="Transitional" o "Strict") oppure no (mode="Legacy"). In ASP .NET 1.1 i controlli subivano un rendering non XHTML compatibile, e questo comportamento è stato modificato in ASP .NET 2.0, che invece effettua il rendering XHTML compliant. Questo significa che...

posted @ Thursday, March 13, 2008 11:24 AM | Feedback (0)

TextBox ReadOnly in .NET 2.0 e successivi

Il controllo TextBox di una web application dispone della proprietà ReadOnly che, ovviamente, impedisce l'interazione dell'utente con il controllo quando è impostata a True. Ma c'è un particolare importantissimo da considerare: a partire dalla versione 2.0 del .NET Framework il contenuto di un textbox in modalità "ReadOnly" è inviato al server durante un postback della pagina, ma il server ignora questo valore; in altre parole il contenuto del textbox viene perso durante un postback. Questo comportamento mira ad impedire attacchi alla sicurezza, che potrebbero modificare un valore che dovrebbe essere mantenuto inalterato. La perdita del valore del textbox può essere inaccettabile in certi contesti applicativi e potrebbe...

posted @ Tuesday, February 26, 2008 10:13 AM | Feedback (1)

Eccezioni non gestite in ASP .NET 2.0

Le eccezioni non gestite generate da una applicazione ASP .NET compilata con la versione 2.0 del .NET Framework sono trattate diversamente da quanto avveniva con le applicazioni ASP .NET compilate con la versione 1.0/1.1. Queste ultime semplicemente ignoravano le eccezioni non gestite sollevate all'esterno del contesto corrente, es. un thread diverso da quello principale, mentre le eccezioni sollevate all'interno del contesto erano trattate normalmente come qualsiasi eccezione non gestita. Con il .NET Framework 2.0 questo comportamento è cambiato: le eccezioni non gestite sollevate fuori dal contesto provocano l'immediata interruzione del worker process e conseguentemente dell'applicazione. L'unica traccia è un laconico...

posted @ Thursday, January 10, 2008 7:43 PM | Feedback (0)

Single Sign On & sezione <machineKey>

Girovagando tra la rete mi sono imbattuto in questo utilissimo tool utilizzabile on-line per la generazione della sezione <machineKey> del web.config, nel caso, molto concreto oggigiorno, si voglia implementare il meccanismo di SSO (Single Sign On) per le proprie applicazioni. In sostanza si tratta di effettuare il login una sola volta ed essere riconosciuto da n applicazioni che condividono in questo modo il contesto di sicurezza dell'utente, con indubbi benefici.

posted @ Wednesday, October 11, 2006 9:17 AM | Feedback (0)

Delete Subdirectory & AppDomain recycle

Tra le cause che provocano lo scaricamento immediato dell'AppDomain di una applicazione ASP .NET 2.0 è presente anche la cancellazione di una sub-directory della applicaizione principale, operata attraverso Windows Explorer. Infatti, dopo tale operazione nell'Event Viewer del server appare un messaggio come questo (di tipo informativo): <>  Questo comportamento è differente rispetto a ad ASP.NET 1.0/1.1, dove la stessa operazione non produceva assolutamente nulla nè l'engine veniva notificato dell'evento; quindi il contenuto della directory cancellata continuava ad essere considerato valido con il potenziale rischio di errore a run-time. Il team di sviluppo di ASP .NET 2.0 ha considerato un bug il comportamento...

posted @ Monday, October 09, 2006 12:59 PM | Feedback (0)

Check-list per applicazioni ASP .NET in produzione

Riporto di seguito una lista, in ordine sparso, tratta dalla mia esperienza sul campo dei possibili accorgimenti e/o errori che influiscono sulla scalabilità o sulle performance e che tornano quindi utili quando si trasferisce su di un server di produzione una applicazione ASP .NET complessa con elevato numero di accessi concorrenti: Di default il numero di connessioni HTTP concorrenti su uno specifico indirizzo IP e per uno specifico AppDomain è pari a 2. Questo valore è sufficiente ad esempio nel caso di web services che vengono acceduti da un unica applicazione ASP .NET e le cui pagine non effettuano chiamate multiple allo...

posted @ Friday, September 15, 2006 12:22 PM | Feedback (0)

Data caching: considerazioni

L'utilizzo della cache in applicazioni web non è sempre intuitivo come potrebbe sembrare. Se inseriamo un oggetto in cache assegnandogli, ad es., una scadenza assoluta di 1 ora, potremmo pensare che lo stesso rimanga in cache fino a che non scade. Invece non è così. Un oggetto in cache può in qualsiasi momento antecedente la sua scadenza (cioè quando è ancora valido) essere eletto per una operazione di garbage collection; quindi può essere distrutto e, in tal caso, la memoria da esso occupata viene liberata, a prescindere se il suo periodo di validità si è esaurito oppure no. Questo comportamento potrebbe verificarsi...

posted @ Friday, September 08, 2006 12:24 PM | Feedback (0)

Una risorsa fondamentale per il mio lavoro

Di questo link ne faccio un post nel mio blog per tenerlo sempre a portata di....mouse!. Trattasi di una raccolta di link di Scott Gu, uno dei maggiori esperti mondiali di ASP .NET e di .NET in generale, riguardanti tips & tricks, approfondimenti e veri e propri tutorial per chi sviluppa applicazioni web di livello enterprise. Il livello di dettaglio e la chiarezza espositiva di Scott Gu è davvero superlativa, e attraverso il suo blog si entra in possesso di "conoscenza" che forse nemmeno i libri di livello avanzato o i workshop tecnici più spinti riescono a fornire. Ho avuto la...

posted @ Tuesday, August 29, 2006 12:49 PM | Feedback (0)

Web deployment project, la mia esperienza

Il nuovo modello di compilazione-deployment di ASP .NET 2.0 non è certamente facile da usare e nemmeno intuitivo, soprattutto per chi proviene da ASP .NET 1.0/1.1.  Non a caso Microsoft ha rilasciato un add-in, il Web deployment Project, praticamente in concomitanza con l'uscita di Visual Studio 2005, che permette di utilizzare il modello di compilazione di ASP.NET 2.0, pur garantendo un alto grado di flessibilità; infatti è possibile compilare una applicazione web  in un singolo assembly, oppure in un assembly separato per ogni sua directory, oppure ancora in un assembly separato per ogni pagina/controllo. In aggiunta, poco tempo dopo è stato rilasciato un'altro add-in, il Web Application Project, di cui...

posted @ Monday, August 28, 2006 12:26 PM | Feedback (0)

Virtual Path Provider

Una tra le feature più innovative di ASP .NET 2.0 è il cosiddetto Virtual Path Provider. Devo dire però che, dopo aver approfondito l'argomento grazie a questo post di Dino Esposito e da lì al link relativo all'articolo su MSDN, non riesco ancora a trovare un campo di applicazione "logico" per questa nuova funzionalità, almeno in ambienti di produzione ad alta disponibilità. Attraverso questa feature si avrà la possibilità di astrarre la risorsa fisica (file, directory) che viene inglobata nella richiesta di una pagina ASP. NET. Questa risorsa fisica in ASP .NET 1.1 deve obbligatoriamente trovarsi sul file system e da...

posted @ Monday, February 20, 2006 7:02 PM | Feedback (0)

.NET Pet Shop 4.0

E' disponibile per il download la versione 4.0 di .NET Pet Shop, una applicazione "benchmark" di esempio per confrontare le prestazioni di una applicazione ASP .NET di classe enterprise con una equivalente applicazione J2EE. La versione 4.0 è focalizzata su ASP .NET 2.0 e mostra come ottenere una applicazione robusta riducendo il numero di righe di codice sorgente necessarie. In questa versione è possibile vedere all'opera le seguenti caratteristiche della versione 2.0 di ASP .NET e del .NET Framework: Uso del nuovo namespace System.Transaction per la gestione di applicazioni distribuite senza ricorrere a COM+, aumentando le prestazioni Uso dei generics Master Pages,...

posted @ Saturday, February 18, 2006 4:27 PM | Feedback (0)