ASP.NET App Suspend

by Andrea Dottor 12 October 2013 12:12

All’interno del .NET Framework 4.5.1 è stata introdotta una nuova funzionalità dal nome ASP.NET App Suspend, che farà la gioia di molti di voi (me compreso).

Di che cosa si tratta?

AppSuspend_wfASP.NET App Suspend permette di ridurre i tempi di avvio di un’applicazione ASP.NET (che solitamente ricadevano nell’utente che si trovava ad eseguire la prima richiesta), in quanto si ha possibilità di specificare che, dopo il tempo di inattività dell’ApplicationPool invece di terminare il processo, ora potrà andare in uno stato di sospensione, permettendo così alla richiesta successiva di non dover ricompilare totalmente l’applicazione.
Questa novità permette di ridurre i tempi di primo avvio del ben 90%.
Altro aspetto da non sottovalutare è che questa funzionalità permetterà così di poter avere più siti in host all’interno dello stesso server, ben 7 volte i siti attuali.
AppSuspend_stats

Vincoli

Per poter utilizzare questa funzionalità, l’applicazione dovrà essere sviluppata con il .NET Framework 4.5.1 e dovrà essere pubblicata in un server Windows Server 2012 R2.

Abilitare la funzionalità

Per abilitare la funzionalità di dovrà intervenire nei settings dell’ApplicationPool andando a selezionare (all’interno delle impostazioni avanzate) nel parametro “Idle Time-out Action” la voce “Suspend” invece di quella di default che è “Terminate”.
AppSuspend_enable

Ed ora non ci resta che aspettare di aggiornare/migrare i nostri server a Windows Server 2012 R2 e godere di questa nuova funzionalità.

Per maggiori informazioni a riguardo, vi consiglio la lettura dei seguenti post:

Tags: , ,

ASP .NET | .NET

Codice e slide della sessione Il buon programmatore - consigli pratici per una vita felice

by Andrea Dottor 12 October 2013 11:38

Venerdì 11 Ottobre 2013 ho tenuto la sessione “Il buon programmatore - consigli pratici per una vita felice”.

Lavorando come consulente mi sono trovato spesso di fronte a problematiche (a volte banali), ma che erano la causa di gravi problemi di performance dell'appliccazione realizzata, oppure più banali, ma che rendevano il codice meno manutenibile e gestibile, specialmente lavorando in team. Vedere che nel tempo, persone/realtà diverse, commettono gli stessi errori mi ha fatto pensare a questa sessione...dove intendo elencare i problemi più comuni, che per causa di tempo o scarsa conoscenza, vengono commessi, e proporre delle soluzioni semplici da poter applicare fin da subito. (ASP.NET, ma non solo)

 

Questa sessione, e specialmente i vostri commenti post-sessione fanno capire quanto spesso le basi, o funzionalità che abbiamo ogni giorno sotto agli occhi, vengano sottovalutate.
Questa sessione è solo un punto di partenza, e chissà che trovi il tempo di approfondire questi ed altri argomenti simili direttamente qui nel blog.

Ringrazio tutti i partecipanti, vedere la sala piena, e gente che prende appunti da una soddisfazione che non immaginate…grazie.
Vi ricordo il prossimo appuntamento su SignalR giovedì 7 Novembre, e per info:
http://www.xedotnet.org/Home/Meeting/20131108

Tags: , , ,

.NET | ASP .NET | XeDotNet

Leggere un feed RSS grazie alla classe SyndicationFeed

by Andrea Dottor 14 August 2013 10:57

Dalla versione 3.5 del .NET Framework è presente la classe SyndicationFeed all’interno del namespace System.ServiceModel.Syndication, che nel framework 3.5 è contenuta nell’assembly System.ServiceModel.Web mentre dal framework 4 la trovate all’interno dell’assembly System.ServiceModel.

Link MSDN: SyndicationFeed Class

Questa classe fornisce i metodi per leggere e scrivere con facilità un feed RSS 2.0 e/o Atom 1.0.

Ecco qui un esempio che dimostra la facilità di utilizzo di questa classe. Il seguente codice permette di recuperare il contenuto di un feed, come ad esempio l’elenco dei post esposti dal feed di un blog:

/// <summary>
/// Classe che rappresenta un elemento contenuto all'interno di un feed RSS
/// </summary>
public class FeedItem
{
    public string Title { get; set; }

    public string Description { get; set; }

    public DateTime Date { get; set; }

    public string Url { get; set; }
}

/// <summary>
/// Metodo che ritorna gli item di un feed RSS, dato l'url del feed
/// </summary>
/// <param name="feedUrl">Url del feed RSS</param>
/// <returns>Elenco di elementi contenuti nel feed</returns>
public IEnumerable<FeedItem> GetPosts(string feedUrl)
{
    List<FeedItem> posts = new List<FeedItem>();
    using (XmlReader reader = XmlReader.Create(feedUrl))
    {
        SyndicationFeed feed = SyndicationFeed.Load(reader);
        reader.Close();
        foreach (SyndicationItem item in feed.Items)
        {
            FeedItem post = new FeedItem
                {
                    Description = item.Summary.Text,
                    Title = item.Title.Text,
                    Date = item.PublishDate.Date,
                    Url = item.Links.Count > 0 ? item.Links.First().GetAbsoluteUri().ToString() : null
                };
            posts.Add(post);
        }
    }

    return posts;
}