Come specificare un HttpHandler nel web.config per applicazioni ASP.NET

Giorgio Borelli

Aggiungere gli httphandler alla propria applicazione web in asp.netGli HttpHandlers di ASP.NET consentono di elaborare una risposta a fronte di una qualsivoglia richiesta al web server (IIS). Usare gli HttpHandlers permette di personalizzare la risposta da inviare al client (il browser) non solo per una classica pagina, ma per qualsivoglia risorsa sia stata richiesta, sia questa una immagine un file pdf o un file di risorse .resx ed altro ancora.

Implementarli nella propria applicazione web offre potenzialità enormi, ed il loro uso è relativamente semplice, questi non sono altro che una implementazione dell'interfaccia IHttpHandler, in grado di prendere in carico il processo della richiesta (HttpContext) ed elaborarne una risposta, per questo a fronte di richieste diverse (pagine, risorse, immagini, etc...) è possibile implementare Handlers diversi così da fornire risposte diverse.

Lo scopo di questo articolo non è quello però di descrivere il funzionamento degli HttpHandler, ma tanto quello di vedere come aggiungerli alla nostra applicazione web tramite il web.config, andiamo a scoprire come fare.

Prosegue...

Categorie: ASP.NET

Tags: , , , , , , ,

Formattare un numero in euro con C# e ASP.NET

Giorgio Borelli

simbolo euro e valuta corrente (currency) in ASP.NET e C#La formattazione di un numero, sia esso intero o in virgola nella valuta corrente ed in particolar modo in euro è un'esigenza con la quale presto o tardi qualsiasi sviluppatore asp.net deve confrontarsi, niente di chè intendiamoci, però basta davvero poco per avere una formattazione corretta e fare le cose fatte bene anzichè ricorrere a metodi e simboli ascii che non soddisfano appieno il nostro obbiettivo.

Per scrivere il simbolo dell'euro in ASP.NET e C# ricorreremo al metodo Format della classe String, andiamo a vedere come fare.

Prosegue...

Categorie: ASP.NET | C#

Tags: ,

Boxing e Unboxing

Giorgio Borelli

Cos'è il boxing e unboxing del .NET frameworkIl Common Language Runtime (CLR) del .NET framework è in grado di eseguire applicazioni scritte in uno qualsiasi dei linguaggi supportati dalla piattaforma, quali C# o VB.NET, anche misti fra loro, questo è possibile grazie al Common Type System (CTS), ovvero l'insieme comune e condiviso dei tipi all'interno del framework.

In altre parole, ad esempio, il tipo int di C# ed integer di VB, durante l'esecuzione non sono altro che il tipo comune System.Int32 del framework.NET, tutto questo sempre ammesso che i linguaggi utilizzati soddisfino determinate specifiche (CLS - Common Language Specification) che li rendano compatibili con quelli comuni del framework.

Fatta questa premessa dovuta per avere un quadro più completo dell'argomento, diciamo che tra i tipi comuni del CLR, vi è un tipo generico da cui derivano tutti gli altri, il tipo System.Object, infatti si suole dire che nel .NET framework qualsiasi cosa è un'oggetto, sia questo un tipo intero, booleano o una classe stessa. La possibilità di avere un tipo generico che rappresenti qualsiasi dato all'interno del nostro programma ci consente di usarlo per potergli associare un qualsivoglia oggetto, sia esso un Tipo Valore o Tipo di Riferimento. Ad un primo impatto questo approccio potrebbe risultare molto comodo, uso solo tipi Object, e l'applicazione gira ugualmente, fregandomene della definizione dei tipi e della loro opportuna gestione.

Ma siamo certi che questo approccio sia corretto, purtroppo no, usare un tipo Object generico porta ad un decadimento delle prestazioni dell'applicazione, poichè avvengono le operazioni di Boxing e Unboxing per la conversione dà Tipi Valore a Tipi di Riferimento e viceversa, andiamo quindi a scoprirne di più su cosa avviene nelle operazioni di Boxing e Unboxing.

Prosegue...

Categorie: .NET framework | C#

Tags: ,

Differenze tra Tipi di Valore e Tipi di Riferimento

Giorgio Borelli

Le principali caratteristiche e differenze tra i tipi di valore ed i tipi di riferimento del .NET frameworkI linguaggi supportati dal .NET framework quali C# e VB si dice che sono strongly-typed, ossia fortemente tipizzati, in parole povere ogni variabile od oggetto dichiarato all'interno del programma deve definire un tipo e lo deve rispettare (pena un errore di compilazione).

Pertanto un tipo descrive le caratteristiche dell'informazione che esso dovrà andare a rappresentare all'interno del programma a mezzo di una variabile, sia esso un numero, una sequenza di caratteri od oggetti più complessi come istanze di classi, in ogni caso ogni elemento all'interno di un programma sviluppato col .NET framework deve essere dichiarato a mezzo di un tipo e ne deve rispettare le funzionalità durante l'uso.

I tipi non si differenziano però solo per il dato che rappresentano, ma anche per la gestione che di questi se ne fà in memoria. All'interno del .NET framework, o meglio del CLR (Common Language Runtime) sono definite due categorie di tipi, i Tipi di Valore (Value Types) e Tipi di Riferimento (Value References), l'una e l'altra categoria presenta le proprie caratteristiche e soprattutto ha un diverso metodo di allocazione della memoria, per chi vuole iniziare a programmare in .NET non può prescindere dalla conoscenza di queste nozioni di base relative ai tipi per valore e per riferimento, andiamo a vedere pertanto le principali caratteristiche e differenze.

Prosegue...

Categorie: .NET framework | C# | Programmazione

Tags: ,

Come generare numeri casuali in C#

Giorgio Borelli

Comm generare un numero casuale in C#Nel .net framework non poteva di certo mancare una classe per gestire i numeri random (casuali), questa è la classe System.Random, la quale ci permette di generare numeri casuali interi, double o riempire array di byte. Possiamo specificare anche un valore massimo, o un range di valori nel quale il nostro numero casuale deve ricadere.

Tramite la classe Random generare numeri casuali in C# è davvero un gioco da ragazzi, dobbiamo porre però attenzione a questo argomento, poichè nasconde un'insidia, infatti è bene sapere che la classe Random permette di generare numeri pseudo-casuali, i numeri generati non sono completamente casuali, poiché sono generati da un'algoritmo matematico (algoritmo sottrattivo) che per sua natura stessa non può essere casuale.

La genereazione di un numero casuale avviene partendo da un valore d'inizializzazione, detto seme, scegliendo sempre lo stesso seme si otterrà sempre la stessa sequenza di numeri pseudo-casuali, proprio perchè generati da un'algoritmo matematico. Per ottenere dei numeri veramente casuali è necessario variare il valore del seme in base ad un qualche fattore, molto utile potrebbe essere il fattore tempo, affidandoci magari al clock di sistema.

Andiamo a vedere come usare la classe Random per generare numeri casuali in C#, facendo bene distinzione tra quelli pseudo-casuali e quelli casuali puri.

Prosegue...

Categorie: .NET framework | C#

Tags: ,

Il pattern Singleton in C#

Giorgio Borelli

Il design pattern Singleton in C SharpNell'ambito della programmazione OOP i design patterns non sono altro che delle soluzioni efficaci, testate e funzionanti a problemi comuni. Utilizzare un pattern al momento opportuno si rivela sicuramente una soluzione elegante ed efficace, ed evita di ri-scrivere del codice potenzialmente non ottimizzato o contentente dei bug. Tuttavia i patterns non rappresentano delle regole scritte per una buona programmazione, più che altro forniscono delle linee guida da seguire quando uno sviluppatore deve mettere appunto un determinata soluzione.

I design patterns sono diversi, ed è celebra la loro raccolta nel libro “Design Patterns: Elements of Reusable Object-Oriented Software” ad opera del Gof (Gang of four - la banda dei quattro), quattro esperti programmatori di fama, i quali hanno suddiviso i patterns in tre famiglie: strutturali, creazionali e comportamentali.

Oggi vogliamo prendere in considerazione il pattern Singleton, appartenente ai patterns creazionali, specifici per la creazione d'istanze. Lo scopo del pattern Singleton è quello di permettere per una classe la creazione di una ed una sola istanza con un'unico punto d'accesso (entry-point) all'istanza a livello globale.

Andiamo a scoprire come s'implementa un pattern Singleton in C# e quali caratteristiche e vantaggi comporta.

Prosegue...

Categorie: C# | Programmazione

Tags: ,

Gli Eventi in C Sharp

Giorgio Borelli

Spiegazione degli eventi in C#Sia che parliamo di programmazione per Windows Form o Web Form la gestione degli eventi in C# è un'aspetto fondamentale che ogni buon programmatore deve conoscere.

Il meccanismo degli eventi consente di notificare dei messaggi tra gli oggetti della mia applicazione al verificarsi di determinate condizioni. Allo scatenarsi di un evento è possibile gestirlo opportunamente per effettuare operazioni ed intraprendere azioni per variare il comportamento dell'applicazione come reazione al cambiamento del suo stato.

Un oggetto che genera un'evento, lo notifica ad un'altro che lo prende in carico e lo gestisce (handler dell'evento), tale meccanismo viene implementato per mezzo dei delegates, gli eventi in C# non sono altro che particolari tipi di delegate multicast.

Prosegue...

Categorie: C#

Tags: ,

I Delegate in C Sharp

Giorgio Borelli

Cosa sono e come funzionano i delegate in C#Un delegate in C# viene spesso descritto come un puntatore a funzione (in analogia con il C++), un ulteriore paragone e quello con le interfacce, un delegate (come le interfacce per le classi) specifica la signature (firma) del metodo che successivamente sarà invocato dai metodi degli oggetti che ne rispettano la firma.

Senza nulla togliere alle analogie che sussistono realmente tra i delegate ed i puntatori a funzioni e le interfacce, penso che per chi è alle prime, una tale definizione può generare un pò di confusione, allora come spiegare cos'è un delegate in C#?

Prosegue...

Categorie: C#

Tags: ,

La gestione delle eccezioni in C Sharp

Giorgio Borelli

Come gestire l'eccezioni nel codice C#, con le istruzioni try, catch, finally e throwLa gestione delle eccezioni indipendentemente dal linguaggio usato è un'aspetto fondamentale di ogni buon programma, sia questo un'applicazione web che un programma stand alone.

Per quanto ben progettato, nessun programma è esente da bug, sia il contesto sia gli errori imprevisti possono comportarne un malfunzionamento o peggio un crash, e quest'ultima è proprio l'effetto che vogliamo evitare assolutamente.

Tramite la gestione delle eccezioni è possibile intercettare e gestire in modo opportuno tutti quegli errori, eventi imprevisti e situazioni anomali, consentendo al programma di ripristinarsi ad uno stato normale ed all'utente di riprenderne il normale uso. Un uso accorto della gestione delle eccezioni permette pertanto di scrivere programmi più robusti ed efficaci.

Tratteremo in questo articolo l'uso dei blocchi, delle parole chiavi, del lancio e della personalizzazione delle eccezioni in C#.

Prosegue...

Categorie: C#

Tags:

Algoritmo Bubble Sort in C#

Giorgio Borelli

Algoritmo di ordinamento Bubble Sort sviluppato in C#L'ordinamento in informatica è sicuramente una delle funzionalità più necessarie ed importanti, uno tra gli algoritmi maggiormente noti ed utilizzati per la sua semplicità è l'algoritmo del Bubble Sort.

Il BubbleSort è un'algoritmo iterativo di ordinamento degli elementi di un array molto usato soprattutto in ambito didattico, per far apprendere le logiche e le basi della programmazione. Il suo nome deriva dal fatto che gli elementi vengono ordinati secondo una logica che li estrae dall'insieme mettendoli in cima al vettore con un'alogia grafica a quella delle bollicine che salgono in un bicchiere di spumante.

Dato un numero n di elementi di qualsiasi tipo, ma tali che esista una relazione di ordinamento tra di loro, l'algoritmo del bubblesort consente di ordinarli in modo crescente o decrescente. Del bubblesort solitamente vi sono svariati esempi in Linguaggio C, in questo articolo vogliamo invece fornirne una versione in Linguaggio C#, mostrando come implementare l'algoritmo del bubble sort in C# in modo efficiente.

Concentreremo l'attenzione solo sul cuore del bubblesort e passo passo vedremo come apportare le varie migliorie per diminuire il numero d'iterazioni ed ottimizzare al massimo l'algoritmo del bubble sort sviluppato in C#.

Prosegue...

Categorie: C#

Tags: , , ,