Post

[.NET] Async await come funzionano in poche parole

Immagine
Oggi vedremmo come implementare un'algoritmo di programmazione asincrona sul web tramite le istruzioni Async e Await.
Vedremmo brevemente le differenze tra la programmazione asincrona per le application windows form e le applicazioni Web, un pò di teoria per capire come funzionano le istruzioni Async/Await, dove usarla  e infine vedremmo un piccolo esempio di programmazione asincrona lato web.
Cosa è la programmazione asincrona Web?Capiamo prima di tutto cosa è la programmazione asincrona nel web. Avete presente quando un Sito internet a cui vi connetete vi risponde con l'errore 503 (Service unavailable)? Tale problema è dato, nella maggior parte delle volte, dal sovraccarico del server Web che ospita il sito internet per le troppe richieste HTTP che sono state effettuate, oppure per motivi manutentivi.
La programmazione asincrona lato Web è una tecnica utilizzata per aumentare le performance dei nostri applicativi web e per rendere meno frequenti gli errori di tipo 503.

Per spi…

[.NET] Elmah Logging

Tempo fa, parlando con dei colleghi sui progetti che stavano sviluppando e per scambiarci qualche idea per agevolare lo sviluppo iniziammo a parlare di logging di errore e di come in fase di sviluppo, già dalle prime battute, fosse importante cercare di avere un log accurato e di facile lettura. 

Di tool di logging ce ne sono molti, log4net di cui ho già parlato parecchio tempo fà è uno di quelli, ma richiedono di implementare nel codice delle istruzioni per permettere a questi tool di fare il proprio lavoro, dall'altro lato, creare un'algoritmo personalizzato per la scrittura del codice è un'altra pratica comune.  

Uno di questi miei colleghi ci spiegò che su un progetto dove stava lavorando utilizzavano un tool per il log di errore molto particolare, che permetteva, senza scrivere nemmeno una riga di codice, di tener traccia di tutti gli errori che potevano accadere durante l'esecuzione del codice. Che era di facile lettura, molto accurato, preciso e che dava la possib…

IoC e Dependency Injection, breve panoramica e implementazione in ASP.NET MVC utilizzando Ninject

Immagine
Di cosa parliamo oggi? Oggi andiamo a vedere come utilizzare il pattern IoC(inversion of control) in ASP.NET MVC utilizzando le librerie Ninjecte le estensioni Ninject.Web.CommonNinject.Web.Mvc. La prima estensione serve per poter usare la seconda, come scritto nelle linee guida, mentre la seconda ci offre il supporto completo di Ninject sull'infrastruttura MVC. Un po' di basi, IoC e Dependency Injection: Cosa sono? Come funzionano? Quali solo i benefici nell'usarli? Cosa sono? Partiamo dall'inizio.  L'inversione di controllo (Inversion of Control) o IoC, non è altro che la possibilità di rendere le componenti software del nostro progetto il più indipendenti possibile, togliendo la responsabilità di istanziare classi all'interno del codice e dandola ad una terza parte, nel nostro caso a Ninject, che creerà le istanze delle classi da noi usate, mentre la nostra classe le consumerà solamente. Mentre il Dependency Injection (DI) è uno dei vari modi di implemen…

[.NET - MVC] Bundling e Minification come implementarlo.

Immagine
Di cosa si parla
In ASP.NET MVC sfruttando i meccanismi di Bundling e il Minification possiamo ridurre drasticamente, se usati insieme, il tempo di caricamento della nostra applicazione web aumentandone le performance.

Una breve panoramica
Il Bundling utilizza i meccanismi del .net per permetterci di comprimere il puntamento ai file Css o ai file Js in un'unica chiamata mentre il Minification ci permette di ridurre semplicemente la grandezza dei file puntati eliminando i righe vuote, commenti e altro.
Ogni volta che creiamo un progetto web MVC partendo dalla versione 4+ partendo dal template base,

utilizziamo il meccanismo del Bundling e Minification.
La classe che si occupa di gestirli si trova sotto la cartella app_start del progetto e si chiama BundleConfig.cs, aprendo questa classe troviamo al suo interno già configurati di default i puntamenti alle librerie javascript di Jquery e ai loro css.
Come possiamo vedere,  la semantica del Bundling è molto semplice, si tratta di dare …

[C#] Configurare e utilizzare LOG4NET per scrittura su file

A volte capita di dover integrare un meccanismo di logging all'interno della nostra applicazione. A tal proposito trovo molto comoda la libreria LOG4NET di Apache scaricabile qui per creare i log in applicazioni .net, per chi di voi conoscesse già LOG4J non ci sono molte differenze nella configurazione di questa libbreria. 
Oggi vedremmo come configurarla e sfruttarla nelle nostre applicazioni .net, per iniziare dobbiamo scaricare la libreria e successivamente aggiungere il riferimento alla nostra applicazione, ricordiamoci di far copiare localmente a Visual Studio la libreria, in caso contrario se esporteremo il progetto avremmo dei problemi a causa della libreria mancante. 
Successivamente dovremmo configurare il file AssemblyInfo.cs aggiungendo la seguente riga:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]   
tale riga ci permette di dire a LOG4NET dove si trova la configurazione da utilizzare per costruire i log, se si tratta di…

[SQL] COLLATE eseguire ricerche Case Sensitive in SQLServer.

A volte capita di dover eseguire una ricerca di una particolare stringa, con maiuscole e minuscole, all'interno di una campo di una tabella a cui non è stata impostata nessuna regola di confronto. L'istruzione COLLATE fa al caso nostro in quanto può essere usata per impostare momentaneamente in fase di ricerca una regola di confronto.
Nel mio caso avevo bisogno di ricercare all'interno di una tabella tutti i record che in un dato campo iniziassero con una Particolare stringa di caratteri ("Users") per poi modificare tale stringa nel suo corrispettivo lowercase ("users"). Per effettuare tale ricerca ho sfruttato il COLLATE Latin1_General_CS_AS che mi ha permesso di fare una ricerca case sensitive all'interno della tabella.
Di seguito la mia query di update:

update folders
set folderpath = lower(folderpath)
where FolderPath COLLATE Latin1_General_CS_AS like 'Users%'
La cosa utile del COLLATE è l'utilizzo di esso anche all'interno della…

[DNN] IIS - HRESULT 0X80070020

Oggi parliamo di un'errore abbastanza strano.  Durante la mattinata mi è capitato di avere alcuni problemi al mio ambiente di test di dnn, in pratica quando accedevo al mio portale DNN la pagina compariva completamente bianca. Pensando che fosse un problema dell'IIS, poichè se fosse stato un problema di DB il nostro fido DNN ci avrebbe avvertiti con un'altro errore, sono andato a vedere che problemi ci potessero essere. Appena accedo all'IIS noto che il mio sito di test è stoppato. Mi dico tranquillamente che a volte può succedere e faccio click su avvia, nello stesso istante si apre una finestrella pop-up con questo errore:
The process cannot access the file because it is being used by another process (HRESULT 0X80070020) Inizio a pensare quale possa essere questo fantomatico processo che blocca iss, non venendomi niente in mente lancio il command prompt in modalità amministratore e digito IISRESET per riavviare IIS. Riaccedo nuovamente al mio ISS e vedo che il mio s…