<?xml version="1.0" encoding="iso-8859-15"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>blogs.ASPItalia.com</title><link>http://blogs.aspitalia.com//daniele//</link><description>blogs.ASPItalia.com</description><language>it-it</language><copyright>1998-2012 ASPItalia.com/blogs.ASPItalia.com</copyright><generator>Generated by feed.ASPItalia.com 'Cortana' 2012.5.12</generator><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><sy:updateBase>1998-01-01T12:00+00:00</sy:updateBase><lastBuildDate>Thu, 01 Mar 2012 18:53:48 GMT</lastBuildDate><image><title>blogs.ASPItalia.com</title><url>http://gui.aspitalia.com/images/aspitalia/syndication.gif</url><link>http://blogs.aspitalia.com//daniele//</link></image><item><title>Visual Studio 11 beta: le novit&amp;#224; di ASP.NET 4.5</title><link>http://blogs.aspitalia.com/daniele/post2747/Visual-Studio-11-Beta-Novita-ASP.NET-4.5.aspx</link><pubDate>Thu, 01 Mar 2012 18:53:48 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2747" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/focuson/1273/Rilasciato-Visual-Studio-11-Beta.aspx"&gt;Visual Studio 11 beta è stato rilasciato in questi giorni&lt;/a&gt;. Oltre al supporto per lo &lt;a href="http://www.winrtitalia.com/sviluppo/"&gt;&lt;strong&gt;sviluppo su Windows 8&lt;/strong&gt;&lt;/a&gt;, include il supporto alla prossima versione del &lt;strong&gt;.NET Framework&lt;/strong&gt;, giunto alla versione &lt;strong&gt;4.5&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;ASP.NET 4.5 introduce novità significative nell'ambito di ASP.NET Core (condiviso con ASP.NET MVC e ASP.NET Web Pages) e di ASP.NET WebForm. Anche ASP.NET MVC 4 le sfrutta, ma in questo post mi concentrerò solo su Core+WebForm, perché MVC segue un percorso di sviluppo separato: se vi interessano ASP.NET MVC e ASP.NET Web Pages 2.0, leggete &lt;a href="http://blogs.aspitalia.com/cradle/post2749/Visual-Studio-11-Beta-Novita-ASP.NET-MVC-ASP.NET-Web.aspx"&gt;questo post&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Dal punto di vista del core, ecco le novità più significative:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;async HttpHandler&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;async HttpModule&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;async Request/Response&lt;/li&gt; &lt;li&gt;await e task-based Handler e Module&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lazy validation&lt;/strong&gt; (niente più necessità di disattivare il controllo dei campi)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;AntiXSS Library&lt;/strong&gt; nativa&lt;/li&gt; &lt;li&gt;supporto ai &lt;strong&gt;WebSockets di HTML5&lt;/strong&gt; (tramite HttpHanlder)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;bundling e minification di JavaScript e CSS&lt;/strong&gt; (comprime ed unisce i file, migliorando le performance)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Per quanto riguarda ASP.NET WebForm, invece, le novità più interessanti sono:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;data control strongly typed &lt;/strong&gt;(niente più &lt;em&gt;Eval&lt;/em&gt;, ma una sintassi stongly typed, con controllo a compile time) e databinding con encoding&lt;/li&gt; &lt;li&gt;niente più uso dei controlli DataSource per scenari avanzati di modifica dati, che ora possono essere implementati con codice (viene usata l'interfaccia IQueryable)&lt;/li&gt; &lt;li&gt;&lt;strong&gt;supporto totale ad HTML5&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Unobtrusive validation&lt;/strong&gt; (senza cambiare i validator, ma con uno switch), per avere codice più elegante&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Model binder&lt;/strong&gt; (preso da MVC), che semplifica le operazioni di recupero delle informazioni e di costruzione delle entità in scenari di editing o routing&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Infine, si segnalano diverse modifiche al runtime, per migliorarne performance e supporto in ambienti d hosting.&lt;/p&gt; &lt;p&gt;Sul fronte di Visual Studio 11, le novità più significative per l'editor sono:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;supporto totale ad &lt;strong&gt;HTML5&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;smart task sul codice HTML&lt;/li&gt; &lt;li&gt;snippet HTML5&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Extract to User control&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;Intellisense nel codice anche sugli attributi&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Event handler da codice&lt;/strong&gt; (tipo editor XAML)&lt;/li&gt; &lt;li&gt;rinominando un tag, si rinomina da solo quello di chiusura&lt;/li&gt; &lt;li&gt;tantissime modifiche all'&lt;strong&gt;editor JavaScript&lt;/strong&gt;, tra cui code outlining, go to definition, DOM Intellisense, referenze implicite&lt;/li&gt; &lt;li&gt;&lt;strong&gt;nuovo editor CSS&lt;/strong&gt;, con supporto per indentazione gerarchica, supporto per gli hack ed I vendor prefix, le region, i commenti ed il grouping&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Le novità di ASP.NET 4.5 sono tantissime e ne parleremo diffusamente nei prossimi mesi. Intanto, è già in &lt;strong&gt;GoLive&lt;/strong&gt; e potete utilizzarlo in produzione, perché supportato.&lt;/p&gt; &lt;p&gt;Vi invito a dare anche un'occhiata alla &lt;a href="http://www.aspitalia.com/eventi/35/Community-Days-2012-Milano.aspx#session103"&gt;mia sessione ai Community Days 2012&lt;/a&gt; (spero ci sia preso il video).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aspitalia.com/focuson/1273/Rilasciato-Visual-Studio-11-Beta.aspx"&gt;Il nostro speciale completo sulle novità di Visual Studio 11 e .NET Framework 4.5 è disponibile qui.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.5/" rel="tag"&gt;.NET Framework 4.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.5/" rel="tag"&gt;ASP.NET 4.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio_11/" rel="tag"&gt;Visual Studio 11&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2747/Visual-Studio-11-Beta-Novita-ASP.NET-4.5.aspx"&gt;&lt;em&gt;Visual Studio 11 beta: le novit&amp;#224; di ASP.NET 4.5&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.5, ASP.NET 4.5, Visual Studio, Visual Studio 11</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2747/Visual-Studio-11-Beta-Novita-ASP.NET-4.5.aspx</guid><slash:comments>4</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2747/Visual-Studio-11-Beta-Novita-ASP.NET-4.5.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2747.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2747</trackback:ping></item><item><title>Inside ModelVirtualCasting #10: tutti pazzi per il web mobile</title><link>http://blogs.aspitalia.com/daniele/post2645/Inside-ModelVirtualCasting-Sharp10-Pazzi-Web-Mobile.aspx</link><pubDate>Mon, 05 Jul 2010 16:47:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2645" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Previously, on &lt;a href="http://lab.aspitalia.com/63/ModelVirtualCasting-Applicazione-Completa-.NET-Framework-4.0-Silverlight-4.0.aspx"&gt;ModelVC&lt;/a&gt;:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;La cache&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx"&gt;Come funziona CacheThis?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/ricciolo/post2636/Inside-ModelVirtualCasting-Sharp5-Servizi.aspx"&gt;II servizi&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx"&gt;SEO con ASP.NET 4.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx"&gt;Come ti creo una form MVC in 20 secondi (a dire tanto...)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/novecento/post2641/Inside-ModelVirtualCasting-Sharp8-Applicazioni-Silverlight-Client-OOB.aspx"&gt;Applicazioni Silverlight sul client (OOB)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2643/Inside-ModelVirtualCasting-Sharp9-Cache-Windows-Server-AppFabric.aspx" target="_blank"&gt;Cache con Windows Server AppFabric&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Una delle necessità, al giorno d'oggi, per chi progetta applicazioni web pubbliche, è quello di prevedere una controparte mobile. Ormai anche in Italia il traffico mobile è di tutto rispetto e quindi occorre tenere presente che:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;i terminali mobile hanno uno &lt;strong&gt;schermo piccolo&lt;/strong&gt;;&lt;/li&gt;&lt;li&gt;la rete italiana se esci fuori dai punti più affollati può essere lenta;&lt;/li&gt;&lt;li&gt;meno informazioni si mostrano, più &lt;strong&gt;rapido è il download&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In ModelVC abbiamo abbozzato una parte mobile (solo sulla parte MVC) creando un &lt;strong&gt;custom ViewEngine&lt;/strong&gt; che si adopera all'uopo e, semplicemente, se la richiesta viene da mobile si occupa di renderizzare la View posta nella directory &amp;quot;Mobile&amp;quot; da creare sotto ogni directory con le View di un dato controller. Per questioni di tempo (e perchè ci soffermeremo su questa parte in futuro), è solo abbozzata per la home page. La parte WebForm, per dire, non ha ancora questa cosa, ma contiamo di realizzarla nella prossima iterazione.&lt;/p&gt;&lt;p&gt;Volevo quindi farmi perdonare, in parte, spiegando un attimo i diversi approcci che ci possono essere quando si ha la necessità di fare un sito mobile. Essenzialmente, possiamo:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;fare un sito ad hoc per il mobile&lt;/strong&gt;. Pro: ottimizziamo al massimo. Contro: molto complesso, soprattutto in fase di manutenzione e miglioramento;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;fare view ad hoc per il mobile&lt;/strong&gt;. Pro: mappiamo il sito attuale. Contro: necessita di tweaking su alcune viste.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Io personalmente preferisco la seconda strada, che è quella che abbiamo abbozzato in ModelVC, in &lt;strong&gt;ASPItalia.com&lt;/strong&gt; (provate, ce l'abbiamo da molto tempo una versione mobile ad hoc ;)) e che mi sento di consigliare in tutti i siti informativi. In applicazioni, invece, è consigliabile la prima scelta, perchè magari i flussi devono essere diametralmente opposti e tenere conto di alcune feature ad hoc del device.&lt;/p&gt;&lt;p&gt;In generale, alcuni tip:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;impostate paginazioni basse: se per il web vanno bene anche 20 elementi, per il mobile meno di 10 (5, come fa Google) può essere la scelta migliore;&lt;/li&gt;&lt;li&gt;evitate informazioni non essenziali: io preferisco i layout a colonna singola, lo spazio è poco e va ottimizzato bene;&lt;/li&gt;&lt;li&gt;generate immagini ottimizzate (e quindi poco pesanti);&lt;/li&gt;&lt;li&gt;usate font grandi: ok lo zoom, ma se lo evitiamo è anche meglio;&lt;/li&gt;&lt;li&gt;affidatevi ad un buon motore di rilevazione: per esempio, &lt;a href="http://mdbf.codeplex.com/" target="_blank"&gt;questo&lt;/a&gt; è ben aggiornato.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A tal proposito, occorre ricordare che ASP.NET supporta di default dalla versione 4.0 solo &lt;strong&gt;Windows Phone&lt;/strong&gt;, &lt;strong&gt;BlackBerry&lt;/strong&gt;, &lt;strong&gt;FireFox Mobile&lt;/strong&gt;, &lt;strong&gt;Opera Mobile&lt;/strong&gt; e&lt;strong&gt; iPhone&lt;/strong&gt;/Safari mobile. Le vecchie definition sono andate via. Importando le definizioni di cui sopra, potete supportarne di tutti e di più.&lt;/p&gt;&lt;p&gt;Per sapere la penetrazione dei browser, potete usare un &lt;a href="http://gs.statcounter.com/" target="_blank"&gt;servizio come questo&lt;/a&gt;. Non sarà attendibile al 100%, ma vi da' un'idea.&lt;/p&gt;&lt;p&gt;&lt;a href="http://gs.statcounter.com/#mobile_browser-IT-monthly-201001-201007-bar" target="_blank"&gt;&lt;img title="StatCounterGlobal" alt="StatCounterGlobal" src="http://blogs.aspitalia.com/img/DanieleBochicchio/d380e5fd8a08_e5f6/statcounterglobal_3.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Infine, ASP.NET 4.0 introduce I provider per le browser capabilities. In ModelVC ce n'è uno (disattivato di default) che vi serve per testare con il browser &amp;quot;normale&amp;quot; come si vede la parte mobile. È molto comodo proprio per poter testare le viste senza utilizzare un browser mobile vero, mentre si sviluppa l'applicazione. Ovviamente, per testare l'usabilità, meglio darsi da fare con il device fisico.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2645/Inside-ModelVirtualCasting-Sharp10-Pazzi-Web-Mobile.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #10: tutti pazzi per il web mobile&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, Model Virtual Casting</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2645/Inside-ModelVirtualCasting-Sharp10-Pazzi-Web-Mobile.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2645/Inside-ModelVirtualCasting-Sharp10-Pazzi-Web-Mobile.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2645.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2645</trackback:ping></item><item><title>Inside ModelVirtualCasting #9: Cache con Windows Server AppFabric</title><link>http://blogs.aspitalia.com/daniele/post2643/Inside-ModelVirtualCasting-Sharp9-Cache-Windows-Server-AppFabric.aspx</link><pubDate>Fri, 02 Jul 2010 10:07:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2643" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Previously, on &lt;a href="http://lab.aspitalia.com/63/ModelVirtualCasting-Applicazione-Completa-.NET-Framework-4.0-Silverlight-4.0.aspx" target="_blank"&gt;ModelVC&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;La cache&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx"&gt;Come funziona CacheThis?&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/ricciolo/post2636/Inside-ModelVirtualCasting-Sharp5-Servizi.aspx"&gt;II servizi&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx"&gt;SEO con ASP.NET 4.0&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2640/Inside-ModelVirtualCasting-Sharp7-Creo-Form-MVC-20-A-Dire.aspx"&gt;Come ti creo una form MVC in 20 secondi (a dire tanto...)&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/novecento/post2641/Inside-ModelVirtualCasting-Sharp8-Applicazioni-Silverlight-Client-OOB.aspx"&gt;Applicazioni Silverlight sul client (OOB)&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ModelVC ha un sistema di &lt;strong&gt;cache a provider&lt;/strong&gt;, che sfrutta le &lt;a href="http://www.winfxitalia.com/script/191/Cache-Applicazioni-API-.NET-Framework-4.0.aspx"&gt;novità in tal senso di .NET Framework 4.0&lt;/a&gt;. Nel trunk trovate un provider per cache in memoria, uno per ScaleOut ed uno per AppFabric. L'argomento è stato comunque già approfondito in una puntata &lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;precedente&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Questo post è un post riparatore, perchè dopo la &amp;quot;RTM&amp;quot; della 0.2, mi sono imbattutto in un caso reale di utilizzo di AppFabric che ha fatto sì che il download originale contenesse una versione non pronta per la produzione. Mi spiego meglio.&lt;/p&gt;

&lt;p&gt;Recentemente, ho finito di scrivere il capitolo riguardante stato e cache per &lt;a href="http://books.aspitalia.com/ASP.NET-4.0-in-practice/"&gt;ASP.NET 4.0 in practice&lt;/a&gt;, che uscirà a breve. Me lo sono tenuto per ultimo per poter fare 2 cose:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;usare l'RTM :) &lt;/li&gt;

  &lt;li&gt;mettere la mia (vera, effettiva) esperenzia con lo scenario. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tal proposito, segno di quanta differenza faccia l'esperienza reale con le fuffe mentali in scenari come questo, ho preso la palla al balzo, decidendo di applicare&lt;strong&gt; AppFabric Cache ad &lt;/strong&gt;&lt;a href="http://www.aspitalia.com/"&gt;&lt;strong&gt;ASPItalia.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &amp;amp; &lt;/strong&gt;&lt;a href="http://www.winfxitalia.com/"&gt;&lt;strong&gt;fra&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;a href="http://www.linqitalia.com/"&gt;&lt;strong&gt;te&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;a href="http://www.silverlightitalia.com/"&gt;&lt;strong&gt;lli&lt;/strong&gt;&lt;/a&gt;. Premessa: abbiamo circa una 30ina di siti, intensi come permutazioni dei vari domini e sottodomini, con tanti pezzi in comune. Tutto gira su un solo server web. E' vero che un meccanismo di cache distribuita da' vantaggi soprattutto in ambito distribuito (altrimenti non si chiaremerebbero così :)), però in questo caso abbiamo ottenuto altri vantaggi di non poco conto:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;deploy a caldo semplificati&lt;/strong&gt;: gli oggetti restano in cache a prescindere dallo stato dell'app domain. Questo vuol dire che se faccio un deployment, ricaricherà gli assembly, non gli oggetti in cache, che restano lì. Morale: parte in una frazione di tempo; &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;minore occupazione di RAM&lt;/strong&gt;: perchè molti di questi siti, di fatto, accedono ad elementi in comune (profili utenti, ultimi aggiornamenti, etc) e quindi traggono un enorme beneficio da questa architettura; &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;sincronizzazione degli oggetti in memoria&lt;/strong&gt;: per farlo con il sistema in memoria, ho dovuto inventarmi una roba assurda, ovviamente con AppFabric Cache è tutto centralizzato e quindi il problema non si pone. Rimuovi dal sito A, tutti gli n altri siti sono in automatico in sync. Figata :) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Torniamo a ModelVC, che mi è servito come base di partenza. Nell'implementazione originale, ho commesso un paio di errori. Il primo, è considerare che la region di default fosse come le altre; invece non è così, ha bisogno di overload specifici, che ora sono codificati. Il secondo, è pensare che l'istanza del &lt;strong&gt;DataCacheFactory&lt;/strong&gt;, che è la classe che accede fisicamente al servizio, potesse essere create e distutta ad ogni richiesta. Invece, l'esperienza con ASPItalia.com mi ha aiutato, non poco, a capire che l'istanza va conservata e va fatto riferimento a questa dai vari metodi:&lt;/p&gt;
&lt;code&gt;private static DataCache CacheFactory 
&lt;br /&gt;{ 
&lt;br /&gt;&amp;nbsp; get 
&lt;br /&gt;&amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (factory == null) 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; lock (syncObj) 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (factory == null) 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DataCacheFactory cacheFactory = new DataCacheFactory(); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; factory = cacheFactory.GetDefaultCache(); 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; } 
&lt;br /&gt;
&lt;br /&gt;&amp;nbsp; &amp;nbsp; return factory; 
&lt;br /&gt;&amp;nbsp; } 
&lt;br /&gt;}&lt;/code&gt;

&lt;p&gt;Non farlo vuol dire che se avete un utente per volta (su ModelVC è la normalità, su ASPItalia.com no :)) tutto funzionerà, altrimenti farà allegramente puff.&lt;/p&gt;

&lt;p&gt;Il codice sorgente lo &lt;a href="http://modelvirtualcasting.codeplex.com/SourceControl/changeset/view/51253#683179" target="_blank"&gt;trovate qui&lt;/a&gt;. Occhio che se usate una region custom, dovete crearla ogni volta. Purtroppo, da questo punto di vista, le API sono immature e quindi vi tocca affogare l'eccezione che risulta, se già esiste:&lt;/p&gt;
&lt;code&gt;private void CreateRegionIfNeeded() 
&lt;br /&gt;{ 
&lt;br /&gt;&amp;nbsp; // verifichiamo se la region esiste 
&lt;br /&gt;&amp;nbsp; // se già esiste, viene scatenata un'eccezione 
&lt;br /&gt;&amp;nbsp; try 
&lt;br /&gt;&amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; CacheFactory.CreateRegion(DefaultRegionName); 
&lt;br /&gt;&amp;nbsp; } 
&lt;br /&gt;&amp;nbsp; catch (DataCacheException ex) 
&lt;br /&gt;&amp;nbsp; { 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (!ex.ErrorCode.Equals(DataCacheErrorCode.RegionAlreadyExists)) 
&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; throw ex; 
&lt;br /&gt;&amp;nbsp; } 
&lt;br /&gt;}&lt;/code&gt; 

&lt;p&gt;Il team stesso indica come l'unica possibile questa via. Avrebbero potuto fare un semplice metodo RegionExists per evitare questa poco elegante forma di gestione.&lt;/p&gt;

&lt;p&gt;L'ultima cosa: è preferibile usare il metodo Put anzichè Insert, perchè quest'ultimo, se l'oggetto già esiste, scatena un'eccezione. Se preferite non tenere lock vari in fase di inserimento, questa può essere una buona scelta, in quanto al massimo sovrascrive l'elemento correntemente in cache.&lt;/p&gt;

&lt;p&gt;Per fortuna AppFabric Caching si installa anche su &lt;strong&gt;Windows 7&lt;/strong&gt; e funziona in modalità &lt;strong&gt;single node&lt;/strong&gt;, quindi potete tenerlo sulla vostra postazione di sviluppo e farci tutti i test che vi pare.&lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" src="http://blogs.aspitalia.com/img/danielebochicchio/26a488ace673_a190/image_3.png" /&gt;&lt;/p&gt;

&lt;p&gt;La schermata di cui sopra viene da ASPItalia.com ed è stata presa circa 10 minuti fa.&lt;/p&gt;

&lt;p&gt;Dopo un mese e spicci di uso continuo, posso dire che il &lt;strong&gt;servizio è molto stabile&lt;/strong&gt;, a patto che non lo riavviate: in questo caso, infatti, non ho capito bene perchè, tende a diventare un po' incasinato ed occorre fare il kill del processo perchè si riavvii. Nei primi giorni avevo messo il riavvio automatico del processo di notte, anche per ripulire la cache, ma poi ho optato per rimuovere questa procedura: gli elementi scadono tutti in base al tempo, quindi si rimuovono da soli e non resta roba che non serve in memoria.&lt;/p&gt;

&lt;p&gt;Per semplificare la rimozione di elementi collegati, dato che non ho fatto uso (per ora) dei ChangeMonitors, ho messi in piedi un sistema che usa i &lt;strong&gt;DataCacheTag&lt;/strong&gt;: praticamente, potete taggare un elemento in cache e poi rimuoverli tutti insieme. Questo mi consente, per esempio, di rimuovere la cache del forum relativa ad un forum, quando uno dei post viene aggiornato/inserito.&lt;/p&gt;

&lt;p&gt;E, per non saper nè leggere nè scrivere, se entri 3 secondi AppFabric non risponde, viene fatto il fallback sulla cache in memoria. Tutti i provider sono stati dotati di un fantastico metodo Ping, che viene invocato per garantire che risponda.&lt;/p&gt;

&lt;p&gt;In estrema analisi, posso dire che AppFabric Caching era davvero il pezzetto che mancava all'application server Microsoft ed è un'aggiunta più che benvenuta. E, ancora una volta, ribadisco che l'unica &lt;strong&gt;via per comprendere appieno come funziona qualcosa è quella di provarla nel mondo reale&lt;/strong&gt;: le simulazioni, almeno in questo campo, non sono significative!&lt;/p&gt;

&lt;p&gt;Infine, risorse sull'argomento:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a title="Un primo sguardo a Microsoft Velocity" href="http://www.aspitalia.com/articoli/asp.net4/velocity.aspx"&gt;Un primo sguardo a Microsoft Velocity&lt;/a&gt;, di Andrea Colaci (che ringrazio per l'aiuto! ;)) &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/ff714581.aspx" target="_blank"&gt;AppFabric Cache: Real-World Usage and Integration&lt;/a&gt;, sempre di Andrea, su MSDN Magazine &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd187373(SQL.100).aspx" target="_blank"&gt;Comandi per Powershell per l'amministrazione&lt;/a&gt;: dopo un po' diventano semplici da usare ;) &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Server/" rel="tag"&gt;Windows Server&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2643/Inside-ModelVirtualCasting-Sharp9-Cache-Windows-Server-AppFabric.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #9: Cache con Windows Server AppFabric&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, Cache, Model Virtual Casting, Windows Server</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2643/Inside-ModelVirtualCasting-Sharp9-Cache-Windows-Server-AppFabric.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2643/Inside-ModelVirtualCasting-Sharp9-Cache-Windows-Server-AppFabric.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2643.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2643</trackback:ping></item><item><title>Inside ModelVirtualCasting #6: SEO con ASP.NET 4.0</title><link>http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx</link><pubDate>Tue, 08 Jun 2010 07:05:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2637" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Ancora su &lt;a href="http://modelvirtualcasting.aspitalia.com/" target="_blank"&gt;ModelVC&lt;/a&gt;, la nostra applicazione preferita :) Previously, on ModelVC:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Sharp2-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;La cache&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2634/Inside-ModelVirtualCasting-Sharp4-Funziona-CacheThis.aspx"&gt;Come funziona CacheThis&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/ricciolo/post2636/Inside-ModelVirtualCasting-Sharp5-Servizi.aspx" target="_blank"&gt;I servizi&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Le tecniche di SEO (&lt;strong&gt;Search Engine Optimization&lt;/strong&gt;) sono molto importanti per un'applicazione web. Fanno la differenza tra il farvi trovare e non farvi trovare dai vostri utenti. Alcune tecniche ben collaudate riguardano in particolare la gestione degli URL dell'applicazione, che è argomento di questo post di approfondimento su ModelVC.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.aspitalia.com/script/1022/Route-SEO-ASP.NET.aspx"&gt;Questo script pubblicato qualche giorno&lt;/a&gt; fa mostra come creare una route (a prescindere dal fatto che è utilizzato con ASP.NET MVC, potrebbe andare bene anche con WebForm) che sia più &lt;strong&gt;SEO-friendly&lt;/strong&gt;, perchè aggiunge uno slash finale all'URL. In ModelVC lo trovate molto simile e vi invito quindi a leggerlo.&lt;/p&gt; &lt;p&gt;Tra l'altro, questa route non toglie via il problema che la pagina risponde ad entrambi le varianti, per cui se avete linkato la versione senza slash finale, occorre fare (come potete leggere nello script) un ulteriore passo per fare un redirect permanent. Se però l'applicazione è nuova ed usate le feature di ASP.NET 4.0 per generare le route, non avrete problemi, perchè l'altra versione non sarà mai linkata.&lt;/p&gt; &lt;p&gt;Questo è un aspetto molto importante da tenere in considerazione, perchè migliora l'indicizzazione sui motori: evitando un doppio contenuto, poi, il motore non vi penalizzerà.&lt;/p&gt; &lt;p&gt;Un altro aspetto importante, che trovate nell'area news di ModelVC, è quello relativo al cosidetto &lt;strong&gt;SLUG&lt;/strong&gt;. Sono gli URL brevi (o comunque descrittivi) che trovate in tantissimi siti. In ModelVC l'URL è più o meno:&lt;/p&gt; &lt;p&gt;&lt;code&gt;http://dominio/news/1/slug-parlante/&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Questo è possibile perchè, prima di tutto, è mappata una route ad hoc:&lt;/p&gt; &lt;p&gt;&lt;code&gt;routes.MapSEORoute( &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;NewsDetails&amp;quot;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;quot;News/{id}/{slug}&amp;quot;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; new { controller = &amp;quot;News&amp;quot;, Action = &amp;quot;Details&amp;quot;, id=&amp;quot;&amp;quot;, slug=&amp;quot;&amp;quot;});&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Il mapping è fatto nel global.asax, ma vale qualsiasi considerazione fatta per le route di ASP.NET. Se volte approfondire l'argomento URL routing, vi consiglio &lt;a href="http://www.aspitalia.com/articoli/asp.net3.5/routing-dynamic-data.aspx"&gt;questo articolo&lt;/a&gt;. Non sono limitate ad ASP.NET MVC, ma fanno parte del runtime di ASP.NET.&lt;/p&gt; &lt;p&gt;Grazie all'uso della route custom, creata in precedenza, in realtà viene sempre aggiunto uno slash finale. A parte questo, come funziona la creazione dello slug?&lt;/p&gt; &lt;p&gt;Per semplificarne l'implementazione, ancora una volta abbiamo creato un extension method per la classe NewsDTO, che è quella che gestisce i DTO delle news (che, ve lo ricordo, vanno in &lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;cache&lt;/a&gt; anche out-of-process e quindi sono ottimizzati per questi scenari). Questo consente di richiamare una generica funzione che, data una stringa, rimuove alcuni caratteri e toglie gli spazi:&lt;/p&gt; &lt;p&gt;&lt;code&gt;return news.Replace(&amp;quot; &amp;quot;, &amp;quot;-&amp;quot;).Replace(&amp;quot;!&amp;quot;, string.Empty).Replace(&amp;quot;?&amp;quot;, string.Empty).Replace(&amp;quot;#&amp;quot;, &amp;quot;Sharp&amp;quot;).Replace(&amp;quot;;&amp;quot;, string.Empty).Replace(&amp;quot;,&amp;quot;, string.Empty);&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Si tratta di un'implementazione semplice, che non tiene conto di diversi fattori: se volete usarla in produzione (noi la miglioreremo nelle prossime build), togliete anche tutti i caratteri accentati e prevedete un corrispondente che vada bene in un URL. In questi casi, comunque, la soluzione migliore, per una questione di performance, è analizzare carattere per carattere la stringa, costruendo uno StringBuilder con il risultato al volo. Noi, dato che non era la parte essenziale di ModelVC, l'abbiamo solo abbozzata. Tanto per fare un altro esempio, ci metterei un controllo massimo sulla parole da visualizzare, limitandolo alle prima 5 o 6.&lt;/p&gt; &lt;p&gt;Ricapitolando: la SEO è importantissima per un'app web e ModelVC vi mostra alcune tecniche interessanti, che possono aiutarvi a migliorare le vostre applicazioni web.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/SEO/" rel="tag"&gt;SEO&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #6: SEO con ASP.NET 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC, Model Virtual Casting, SEO</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2637/Inside-ModelVirtualCasting-Sharp6-SEO-ASP.NET-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2637.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2637</trackback:ping></item><item><title>Inside ModelVirtualCasting #3: la cache</title><link>http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx</link><pubDate>Mon, 31 May 2010 11:52:08 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2630" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Uno dei punti in cui io e &lt;a href="http://blogs.aspitalia.com/cradle/" target="_blank"&gt;MarcoDes&lt;/a&gt; (che abbiamo curato maggiormente la parte web) abbiamo investito gli ultimi scampoli di giorni prima dell'evento è per finalizzare la parte di gestione della cache. Prima di continuare, però:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2627/Inside-ModelVirtualCasting-Sharp1-Introduzione-Repository.aspx"&gt;Introduzione ai repository&lt;/a&gt; &lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.aspitalia.com/cradle/post2629/Inside-ModelVirtualCasting-Architettura-Interna-Repository.aspx"&gt;Architettura interna dei repository&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt; &lt;p&gt;Tradizionalmente, le applicazioni web basate su ASP.NET soffrono del fatto che la cache è stata pensata per essere solo in process ed esclusivamente per ASP.NET. Fino ad ASP.NET 3.5, infatti, si trova in System.Web.Caching. Non c'è niente di male ad utilizzare una reference a System.Web, finchè, ovviamente, non decidete di fare un'applicazione non-web e sfruttare il Client Profile del .NET Framework.&lt;/p&gt; &lt;p&gt;Inoltre, se la vostra applicazione ha un forte carico o, semplicemente, vi interessano scenari &lt;em&gt;apocalittici&lt;/em&gt;, come quelli in cui una web app ed un windows service lavorano sugli stessi oggetti in cache, in ASP.NET 3.5 non c'è niente di pronto e vi tocca costruirvi tutto quello che vi serve per gestire la &lt;strong&gt;cache out-of-process&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;.NET Framework 4.0, per questo motivo, introduce un nuovo assembly (System.Runtime.Caching), che si può referenziare in tutti i tipi di applicazioni. Trovate approfondimeti in &lt;a href="http://www.winfxitalia.com/script/191/Cache-Applicazioni-API-.NET-Framework-4.0.aspx" target="_blank"&gt;questo script&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;ASP.NET 4.0, essendo parte del framework, ha quindi la possibilità di sfruttare questo nuovo meccanismo a provider, dove &lt;strong&gt;ObjectCache&lt;/strong&gt; fa da base per le possibili implementazioni custom. Avere una classe base, da cui poter ereditare e su cui implementare le proprie personalizzazioni è molto comodo, perchè con le versioni precedenti era necessario farsi il sistema completo (interfaccia base per i provider, IoC container, cache factory) e perdere un bel po' di tempo. In più, il nuovo modello della cache supporta una granularità migliore (ad esempio, si vedano i ChangeMonitor e più in generale la CacheItemPolicy). Purtroppo ad ASP.NET 4 manca l'ultimo miglio, cioè un vero provider model implementato al 100%, per capirci come quello di Membership API, dove avete tutti i pezzi già pronti e la configurazione guida il provider utilizzato.&lt;/p&gt; &lt;p&gt;In realtà, se da un punto di vista pratico questa è una limitazione (vi obbliga ad inventarvi la vostra strada), dall'altro lascia aperte possibilità molto interessanti, nell'ambito dell'estrema personalizzazione che consente.&lt;/p&gt; &lt;p&gt;Tutto ciò premesso, l'idea di aggiungere la cache a &lt;strong&gt;&lt;a href="http://modelvirtualcasting.aspitalia.com/" target="_blank"&gt;ModelVC&lt;/a&gt;&lt;/strong&gt;, la nostra applicazione "cavia", è partita da 3 presupposti fondamentali:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;cache a provider&lt;/strong&gt;, con IoC: deve bastare cambiare la configurazione perchè cambi il provider utilizzato; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;poco intrusiva&lt;/strong&gt;: devo poter decidere al volo se un dato elemento va in cache, oppure no; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;intuitiva, facile da usare e configurabile&lt;/strong&gt;: deve essere aggiunta ai repository (di cui Marco ha già parlato) in maniera rapida. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;L'idea iniziale per avere i punti 2 e 3 è stata quella di sfruttare un attributo, per decorare un metodo del repository. Ad esempio, così:&lt;/p&gt; &lt;p&gt;&lt;pre&gt;namespace ASPItalia.ModelVirtualCasting.Common 
{&amp;#160; 
&amp;#160; public interface INewsRepository : IRepository&amp;lt;INewsRepository, News&amp;gt; 
&amp;#160; {&amp;#160; 
&amp;#160;&amp;#160;&amp;#160; [CacheThis(&amp;quot;last-news&amp;quot;, 60)]&amp;#160; 
&amp;#160;&amp;#160;&amp;#160; List&amp;lt;NewsDTO&amp;gt; GetLastNewsDTO(int number);&amp;#160; 
&amp;#160; } 
}&lt;/pre&gt;&lt;/p&gt; &lt;p&gt;Attraverso l'attributo CacheThis, in automatico, iniettiamo (con &lt;strong&gt;AOP&lt;/strong&gt;) la cache sul metodo che restituisce la lista delle ultime news. L'attributo (guardate pure il codice) è pensato per variare la chiave che associata alla cache in base al valore dei parametri che vengono passati, rendendo trasparente l'uso in un'applicazione reale, dove magari in home page tirate fuori 10 elementi, ma nella pagina dedicata la visualizzate semplicemente tutti.&lt;/p&gt; &lt;p&gt;A questo punto, il grosso del lavoro è svolto da Unity, che si occupa di caricare il tipo effettivamente mappato nel web.config.&lt;/p&gt; &lt;p&gt;Per quanto riguarda i provider, per poter gestire il fatto che &lt;strong&gt;MemoryCache&lt;/strong&gt;, cioè il provider di default che lavora in memoria, non ha un costruttore ma una proprietà Default attraverso il quale si accede alla sua istanza, abbiamo implementato una semplice interfaccia, con un metodo GetInstance(), che restituisce un tipo ObjectCache.&lt;/p&gt; &lt;p&gt;Per questo motivo, il provider con cache in memoria è molto semplificato:&lt;/p&gt; &lt;p&gt;&lt;pre&gt;namespace ASPITALIA.ModelVirtualCasting.Cache.Providers.InMemory 
{ 
&amp;#160; public class MemoryCacheBuilder : ICacheBuilder&amp;#160; 
&amp;#160; {&amp;#160; 
&amp;#160;&amp;#160;&amp;#160; public MemoryCacheBuilder() { } 

&amp;#160;&amp;#160;&amp;#160; public ObjectCache GetInstance()&amp;#160; 
&amp;#160;&amp;#160;&amp;#160; {&amp;#160; 
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return MemoryCache.Default;&amp;#160; 
&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt; &lt;p&gt;&amp;#160; } 
}&lt;/pre&gt;&lt;/p&gt;  &lt;p&gt;Al contrario, i due provider per la cache out-of-process sono stati implmentati derivando da ObjectCache, oltre che implementando l'interfaccia ICacheBuilder. Ne trovate uno per &lt;a href="http://www.scaleoutsoftware.com/" target="_blank"&gt;&lt;strong&gt;Scaleout&lt;/strong&gt;&lt;/a&gt; (un prodotto commerciale) e per &lt;strong&gt;Windows Server AppFabric Caching&lt;/strong&gt; (gratuito, in RC, conosciuto come Velocity). Non c'è niente di interessante in questi due, nel senso che sono semplicemente un mapping verso le rispettive API di quelle previste da ObjectCache. E' interessante, però, dare un'occhiata a come i provider, attraverso la proprietà DefaultCacheCapabilities, si descrivano, dicendo quali feature supportano.&lt;/p&gt; &lt;p&gt;Chiudo con una piccola nota: per supportare scenari del genere, con cache out-of-process, le entità devono essere serializzabili. Dato che abbiamo utilizzato dei proxy per Entity Framework, abbiamo preferito affidarci ad un &lt;strong&gt;DTO&lt;/strong&gt;. Da un punto di vista delle performance, poi, questa è comunque la scelta migliore, in quanto consente di tenere in cache solo i dati effettivamente utilizzati in quel particolare caso d'uso.&lt;/p&gt; &lt;p&gt;Nel prossimo futuro contiamo di aggiungere il supporto all'invalidazione della cache in fase di modifica, per supportare scenari come l'aggiornamento o l'inserimento di un nuovo elemento, che attualmente richiedono che venga scritto del codice ad hoc.&lt;/p&gt; &lt;p&gt;Direi che per quanto riguarda la cache, è tutto. Come detto, &lt;a href="http://modelvirtualcasting.aspitalia.com/" target="_blank"&gt;ModelVC la trovate qui&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASPItalia.com/" rel="tag"&gt;ASPItalia.com&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Cache/" rel="tag"&gt;Cache&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Model_Virtual_Casting/" rel="tag"&gt;Model Virtual Casting&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx"&gt;&lt;em&gt;Inside ModelVirtualCasting #3: la cache&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, ASP.NET 4.0, ASPItalia.com, Cache, Model Virtual Casting</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2630/Inside-ModelVirtualCasting-Sharp3-Cache.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2630.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2630</trackback:ping></item><item><title>Ecco cosa penso di ASP.NET 4.0</title><link>http://blogs.aspitalia.com/daniele/post2623/Penso-ASP.NET-4.0.aspx</link><pubDate>Tue, 11 May 2010 09:00:21 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2623" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Da 5 mesi a questa parte ho avuto la possibilità, grazie ai nostri clienti, di tenere mediamente una edizione a settimana del nostro &lt;a href="http://corsi.aspitalia.com/corso-ASP.NET-4.0.aspx" target="_blank"&gt;corso su ASP.NET 4.0&lt;/a&gt;, più svariate altre sessioni qui e la, in conferenze varie. E, come se non bastasse, ho dovuto seguire &lt;a href="http://books.aspitalia.com/ASP.NET-4.0/"&gt;questo&lt;/a&gt; e &lt;a href="http://manning.com/bochicchio/"&gt;questo libro&lt;/a&gt;. Aggiungeteci che nel tempo libero tra queste attività ci sono i normali progetti. Mi sono fatto una bella full immersion di ASP.NET 4.0.&lt;/p&gt; &lt;p&gt;Quindi, mi sono fatto un'idea abbastanza decente di tutto quello che più o meno mi piace e non mi piace in ASP.NET 4.0. Cominciamo da quello che mi piace, perchè è più semplice. In generale, adoro il nuovo sistema di &lt;strong&gt;generazione del markup&lt;/strong&gt;, ma penso che arrivi storicamente in un momento sbagliato. Fermo restando che (ovviamente) è una manna per quei progetti già nati e che devono continuare, se avete questo pressante problema, la risposta è fatta di tre lettere: &lt;a href="http://mvc.aspitalia.com/"&gt;&lt;strong&gt;MVC&lt;/strong&gt;&lt;/a&gt;. Dai miei parzialissimi dati, non arriviamo al 10% di sviluppatori ASP.NET che hanno interesse a passare ad MVC, per questo o per l'altro problema/motivo. E' sicuramente un dato che fa riflettere, però è anche abbastanza prevedibile. E' questione di maturazione di tool e della tecnologia. E di come il vendor ci si ponga. E ce la ponga.&lt;/p&gt; &lt;p&gt;Personalmente, come è ovvio che sia, adoro MVC, ma non credo che WebForm faccia schifo, anzi: sicuramente in certi contesti è più difficile da addomesticare, ma se uno ha 10 anni di esperienza, un po' di ossa se le è fatte e sa come reagire. Due scelte, comunque, sono meglio di una sola, parafrasando la pubblicità del MaxiBon.&lt;/p&gt; &lt;p&gt;Ad ogni modo, senza cambiare troppo discorso, quello che realmente non mi piace è. quasi il resto :) Alcune feature sono implementate a metà: &lt;strong&gt;cache a provider&lt;/strong&gt; o &lt;strong&gt;AJAX&lt;/strong&gt;, tanto per dirne un paio. Con un piccolo ulteriore sforzo si sarebbero potute portare a compimento. E lo dico con cognizione di causa, non tanto per dirlo.&lt;/p&gt; &lt;p&gt;Altre funzionalità, come &lt;strong&gt;Dynamic Data Control&lt;/strong&gt;, non sono sempre in grado di reggere scenari più complessi di Northwind. Non parliamo del bagno di sangue che diventa utilizzarci le entità POCO di Entity Framework: è semplicemente necessario modificare alcuni template perchè funzionino.&lt;/p&gt; &lt;p&gt;Un punto a favore lo merita l'estendibilità aggiunta (ulteriormente) al runtime, che vale tanto per WebForm, quanto per MVC: poter estendere i metodi di encoding e di validazione della richiesta da' un valore aggiunto sensazionale.&lt;/p&gt; &lt;p&gt;In generale, se la 3.5 non mi aveva entusiasmato, riguardo alla 4.0 ho un sentimento abbastanza positivo, più che altro per le novità che si porta dietro il framework in quanto tale, dai linguaggi alla BCL, passando per &lt;strong&gt;Entity Framework 4.0&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Se vi interessa sentirmi dire queste cose, motivandole con le scelte fatte per creare &lt;a href="http://lab.aspitalia.com/63/ModelVirtualCasting-Applicazione-Completa-.NET-Framework-4.0-Silverlight-4.0.aspx"&gt;una bella applicazione reale&lt;/a&gt; (perchè sono belli i contenuti :)), dalla regia mi sussurrano che abbiamo ancora qualche posto disponibile per il &lt;strong&gt;25 maggio a Firenze&lt;/strong&gt;, per &lt;a href="http://www.aspitalia.com/eventi/27/Real-Code-Conference-4.0-Firenze.aspx"&gt;Real Code Conference 4.0&lt;/a&gt;. Ammesso che vi interessi un'opinione spensierata, da parte di chi ASP.NET 4.0 lo usa ;)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2623/Penso-ASP.NET-4.0.aspx"&gt;&lt;em&gt;Ecco cosa penso di ASP.NET 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2623/Penso-ASP.NET-4.0.aspx</guid><slash:comments>3</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2623/Penso-ASP.NET-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2623.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2623</trackback:ping></item><item><title>&amp;quot;ASP.NET 4.0 in practice&amp;quot; al 50% di sconto solo per oggi!</title><link>http://blogs.aspitalia.com/daniele/post2598/ASP.NET-4.0-Practice-50-Sconto-Oggi.aspx</link><pubDate>Tue, 23 Mar 2010 09:18:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2598" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Direi che non servono altri commenti! :)&lt;/p&gt;&lt;p&gt;Lo trovate a &lt;a href="http://g.aspitalia.com/g/c/705/" target="_blank"&gt;questa pagina&lt;/a&gt;. Basta usare il codice &amp;quot;dotd0323&amp;quot; in fase di checkout. L'offerta vale solo per oggi, accorrete! :)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2598/ASP.NET-4.0-Practice-50-Sconto-Oggi.aspx"&gt;&lt;em&gt;&amp;quot;ASP.NET 4.0 in practice&amp;quot; al 50% di sconto solo per oggi!&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2598/ASP.NET-4.0-Practice-50-Sconto-Oggi.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2598/ASP.NET-4.0-Practice-50-Sconto-Oggi.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2598.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2598</trackback:ping></item><item><title>jQuery diventa centrale nella strategia Microsoft per ASP.NET</title><link>http://blogs.aspitalia.com/daniele/post2597/JQuery-Diventa-Centrale-Strategia-Microsoft-ASP.NET.aspx</link><pubDate>Tue, 16 Mar 2010 22:05:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2597" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;E non solo. &lt;a href="http://stephenwalther.com/blog/archive/2010/03/16/microsoft-jquery-and-templating.aspx"&gt;Leggete qui&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Finalmente posso urlare al mondo la mia felicità, dato che mi tenevo questa cosa dentro da un po' :)&lt;/p&gt;&lt;p&gt;Personalmente non mi è mai piaciuta la Microsoft AJAX Library e sono felice che abbiano deciso di puntare su &lt;strong&gt;jQuery&lt;/strong&gt;. Prendete il &lt;a href="http://www.aspitalia.com/focuson/1128/Speciale-JQuery-Javascript-Marcia.aspx"&gt;nostro speciale&lt;/a&gt; di qualche tempo fa come un antipasto in tal senso&amp;#xa0;:)&lt;/p&gt;&lt;p&gt;Ha tantissimo senso che abbiano deciso di contribure a questo progetto, anzichè creare nuovamente una library che all'atto pratico era limitata e con cui non c'è mai stato feeling. Questo non vuol dire che ASP.NET AJAX o l'AJAX Control Toolkit saranno abbandonati: semplicemente, saranno portati avanti per chi preferisce usare i controlli server, anzichè scrivere codice Javascript.&lt;/p&gt;&lt;p&gt;Ci sono tante altre notizie dal MIX10, ma ci sarà tempo per parlarne. Per ora, questa è una grandissima novità.&lt;/p&gt;&lt;p&gt;PS: entrambi i &lt;a href="http://books.aspitalia.com/"&gt;nostri libri su ASP.NET&lt;/a&gt;, sia quello in italiano che quello in inglese, hanno già recepito questo nuovo indirizzo ;)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/AJAX/" rel="tag"&gt;AJAX&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0_Guida_completa/" rel="tag"&gt;ASP.NET 4.0 Guida completa&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_AJAX/" rel="tag"&gt;ASP.NET AJAX&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/jQuery/" rel="tag"&gt;jQuery&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2597/JQuery-Diventa-Centrale-Strategia-Microsoft-ASP.NET.aspx"&gt;&lt;em&gt;jQuery diventa centrale nella strategia Microsoft per ASP.NET&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, AJAX, ASP.NET 4.0, ASP.NET 4.0 Guida completa, ASP.NET AJAX, jQuery, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2597/JQuery-Diventa-Centrale-Strategia-Microsoft-ASP.NET.aspx</guid><slash:comments>5</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2597/JQuery-Diventa-Centrale-Strategia-Microsoft-ASP.NET.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2597.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2597</trackback:ping></item><item><title>ASP.NET WebForm ed il falso mito del markup incontrollabile</title><link>http://blogs.aspitalia.com/daniele/post2588/ASP.NET-WebForm-Falso-Mito-Markup-Incontrollabile.aspx</link><pubDate>Mon, 08 Feb 2010 07:15:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2588" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Premessa: non c'è dubbio che con ASP.NET MVC il markup sia più facilmente controllabile, perchè la cosa è semplicissima, se ci pensate. Con MVC dovete scrivervelo, punto. Non avete tanto da girare intorno, o da prendere per oro colato. Fermo restando che resto un fan di ASP.NET MVC, per le sue caratteristiche e le sue peculiarità, non lo scelgo solo perchè mi fa scrivere tutto il markup a mano. Volendo posso farlo anche con WebForm, con un pizzico di overhead in più, ma se volessi performance assolute dovrei smettere domani di usare un framework, che per definizione è un'astrazione e quindi, come tale, porta overhead.&lt;/p&gt; &lt;p&gt;Comunque, per chi fosse a digiugno di quanto disponibile fino alle 3.5 in fatto di markup generato da ASP.NET (o meglio, dai suoi controlli), consiglio la lettura di &lt;a href="http://msdn.microsoft.com/it-it/library/cc185030.aspx" target="_blank"&gt;questo mio articolo su MSDN&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In pratica, ASP.NET ha un meccanismo, dalla notte dei tempi, per cui il markup generato cambia in base al browser che lo richiede. Si chiama &lt;strong&gt;Adaptive Rendering&lt;/strong&gt;. Se questa feature in teoria è una figata, nella pratica si è mostrata limitata. Tanto per fare un esempio, Chrome ha delle piccole funzionalità che non sono correttamente mappate nelle browser definition (perchè Chrome è uscito dopo il SP 1 della 3.5 e comunque non è "classificato") e quindi l'output prodotto non è perfetto. E' anche per questo che nelle future versioni questo meccanismo è stato reso più facilmente bypassabile.&lt;/p&gt; &lt;p&gt;A partire dalla versione 4.0, comunque, tutti i controlli hanno un meccanismo di opt-out per evitare di inserire tabelle o altri pezzi di markup non voluti. Una maggiore aderenza agli &lt;strong&gt;standard web&lt;/strong&gt; è senza dubbio il filo conduttore della prossima imminente release.&lt;/p&gt; &lt;p&gt;Mentre scrivevo il capitolo 10 del mio prossimo libro "&lt;a href="http://books.aspitalia.com/asp.net-4.0-in-practice/" target="_blank"&gt;ASP.NET 4.0 in practice&lt;/a&gt;" non ho potuto fare a meno di riflettere un po' su questo argomento. Dato che il titolo del capitolo è "Taking control of markup", è ovvio che si parla di adaptive rendering e browser capabilities. Entrambi consentono di adattare il markup alle proprie necessità. Ad esempio, dato che il libro è fatto di esempi pratici, ce ne sono un paio che riguardano l'uso di DataList senza tabelle, con layout fluido, dell'aggiunta degli optgroup a DropDownList, della scrittura di un provider custom per far generare, sempre, output XHTML ai controlli.&lt;/p&gt; &lt;p&gt;In realtà l'output dei controlli è sempre controllabile, probabilmente con un po' di fatica in più, ma con effetti duraturi: fatto l'adapter, registrato, l'effetto è che tutti i controlli di quel tipo ne trarranno beneficio. In certi contesti continuo a preferirlo al dover ripetere il markup localmente. E questo approccio consente di non riscrivere la parte di UI, potendone però migliorare il markup anche in maniera "postuma".&lt;/p&gt; &lt;p&gt;Resto pienamente convinto che probabilmente Repeater (e forse ListView, in certi scenari) dovrebbero essere la scelta di default per l'estrazione dei dati e che pochi altri controlli vadano usati. E, nel mentre, mi domando se non sia che quelli che si lamentano oggi dello scarso controllo dell'output di ASP.NET WebForm non siano in realtà gli stessi che ieri usavano &amp;lt;asp:Image /&amp;gt; perchè il tag &amp;lt;img /&amp;gt; non sapevano che esistesse, o mettevano custom control anche dentro l'insalata, per comodità. Perchè, in realtà, l'output dei controlli si può domare facilmente: basta volerlo. Consiglio di dare un'occhiata ad uno dei pezzi più belli dell'architettura di ASP.NET WebForm, perchè ne vale davvero la pena.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/XHTML/" rel="tag"&gt;XHTML&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2588/ASP.NET-WebForm-Falso-Mito-Markup-Incontrollabile.aspx"&gt;&lt;em&gt;ASP.NET WebForm ed il falso mito del markup incontrollabile&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 3.5, ASP.NET 4.0, ASP.NET MVC, XHTML</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2588/ASP.NET-WebForm-Falso-Mito-Markup-Incontrollabile.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2588/ASP.NET-WebForm-Falso-Mito-Markup-Incontrollabile.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2588.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2588</trackback:ping></item><item><title>Il mini web.config con ASP.NET 4.0</title><link>http://blogs.aspitalia.com/daniele/post2566/Mini-Web.config-ASP.NET-4.0.aspx</link><pubDate>Mon, 09 Nov 2009 14:50:59 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2566" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Posso dire una cosa? Spettacolo! :)&lt;/p&gt; &lt;pre&gt;&amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;compilation debug=&amp;quot;true&amp;quot; targetFramework=&amp;quot;4.0&amp;quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pages controlRenderingCompatibilityVersion=&amp;quot;4.0&amp;quot; clientIDMode=&amp;quot;AutoID&amp;quot;/&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/pre&gt; &lt;p&gt;Questo è il web.config di default con &lt;a href="http://tags.aspitalia.com/asp.net_4.0/"&gt;ASP.NET 4.0&lt;/a&gt;. Tutta la parte "verbosa" è stata tolta. Finalmente! :)&lt;/p&gt; &lt;p&gt;PS: se volete un'anteprima di ASP.NET 4.0, terrò due sessioni (dal taglio molto diverso) nei prossimi mesi, una a &lt;a href="http://www.techdays-wpc.it/dettagliospeakers.aspx?idspeaker=6"&gt;TechDays WPC&lt;/a&gt;, l'altra al nostro &lt;a href="http://www.aspitalia.com/eventi/21/real-code-day-4.0-costruire-applicazioni-reali-firenze.aspx"&gt;Real Code Day 4.0&lt;/a&gt; (per cui abbiamo ancora gli ultimissimi posti disponibili, con iscrizione gratuita!).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/web.config/" rel="tag"&gt;web.config&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2566/Mini-Web.config-ASP.NET-4.0.aspx"&gt;&lt;em&gt;Il mini web.config con ASP.NET 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, web.config</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2566/Mini-Web.config-ASP.NET-4.0.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2566/Mini-Web.config-ASP.NET-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2566.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2566</trackback:ping></item><item><title>.NET Framework 4.0 beta 2: ASP.NET 4.0</title><link>http://blogs.aspitalia.com/daniele/post2550/.NET-Framework-4.0-Beta-2-ASP.NET-4.0.aspx</link><pubDate>Mon, 19 Oct 2009 18:18:24 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2550" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Le novità rispetto alla &lt;a href="http://blogs.aspitalia.com/daniele/post2496/.net-framework-4.0-beta-1-asp.net-4.0.aspx"&gt;beta 1&lt;/a&gt; sono tante.&lt;/p&gt; &lt;p&gt;Partiamo con ordine.&lt;/p&gt; &lt;p&gt;La cosa più attesa è sicuramente l'integrazione all'interno di VS 2010 della possibilità di gestire più web.config, per i vari ambienti (test, staging, produzione), unità alla nuova caratteristica di minificare il web.config, cioè di ridurlo al minimo:&lt;/p&gt; &lt;pre&gt;&lt;p&gt;&amp;lt;system.web&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; &amp;lt;compilation targetFramework=&amp;quot;4.0&amp;quot; /&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;/system.web&amp;gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;Rispetto alla versione 3.5 questa modalità consente di tenere un web.config più ordinato, perchè la 4.0 è una major release e quindi è stato possibile fare un lavoro di "pulizia".&lt;/p&gt; &lt;p&gt;Rispetto alla beta 1 fa la comparsa la possibilità di emettere codice XHTML senza la necessità di utilizzare i CSS Control Adapters, attraverso uno switch nel web.config che di default è disattivato per compatibilità.&lt;/p&gt;&lt;pre&gt; &lt;p&gt;&amp;lt;system.web&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; &amp;lt;pages controlRenderingCompatibilityVersion=&amp;quot;4.0&amp;quot;/&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;/system.web&amp;gt;&lt;/p&gt;&lt;/pre&gt; &lt;p&gt;Sul fronte del supporto al Provider Model, ora anche l'&lt;strong&gt;OutputCache&lt;/strong&gt;, oltre ai già annunciati Browser Capabilities e Cache, può godere di personalizzazioni estese grazie alla possibilità di cambiare il comportamento predefinito senza toccare il codice.&lt;/p&gt; &lt;p&gt;Capitolo a parte merita &lt;strong&gt;ASP.NET AJAX&lt;/strong&gt;, la cui preview 6 è stata &lt;a href="http://www.aspitalia.com/focuson/1125/rilasciata-microsoft-ajax-library-preview.aspx"&gt;appena rilasciata&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ci sono svariate migliorie all'ouput, come un più corretto uso degli attributi sui controlli, la scomparsa di tabelle che non possono essere rimosse in controlli dove non ce n'è bisogno (FormView e Login, ad esempio).&lt;/p&gt; &lt;p&gt;Sul fronte dei controlli, &lt;strong&gt;ListView&lt;/strong&gt; non ha più bisogno di un LayoutTemplate, per gli scenari più semplici, il controllo &lt;strong&gt;Menu&lt;/strong&gt; emette un markup senza tabelle, mentre &lt;strong&gt;Wizard&lt;/strong&gt; e &lt;strong&gt;CreateUserWizard&lt;/strong&gt; consentono un controllo maggiore dell'output.&lt;/p&gt; &lt;p&gt;Rispetto a quanto disponibile con la beta 1, le novità di Dynamic Data, Routing e ViewState sono state consolidate. In generale VS 2010 beta 2 ha un supporto più maturo per lo sviluppo web e più rispettoso degli &lt;strong&gt;standard web&lt;/strong&gt; rispetto alle versioni precedenti.&lt;/p&gt; &lt;p&gt;Per maggiori informazioni sulle altre tecnologie all'interno del .NET Framework 4.0 si può fare riferimento al &lt;a href="http://www.aspitalia.com/focuson/1126/visual-studio-2010-.net-framework-4.0-beta-data-release.aspx"&gt;nostro speciale&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_AJAX/" rel="tag"&gt;ASP.NET AJAX&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/web.config/" rel="tag"&gt;web.config&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2550/.NET-Framework-4.0-Beta-2-ASP.NET-4.0.aspx"&gt;&lt;em&gt;.NET Framework 4.0 beta 2: ASP.NET 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, ASP.NET 4.0, ASP.NET AJAX, Visual Studio, web.config</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2550/.NET-Framework-4.0-Beta-2-ASP.NET-4.0.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2550/.NET-Framework-4.0-Beta-2-ASP.NET-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2550.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2550</trackback:ping></item><item><title>.NET Framework 4.0 beta 1: ASP.NET MVC</title><link>http://blogs.aspitalia.com/daniele/post2515/.NET-Framework-4.0-Beta-1-ASP.NET-MVC.aspx</link><pubDate>Tue, 09 Jun 2009 18:56:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2515" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;ASP.NET MVC sarà incluso in ASP.NET 4.0 e VS 2010, con una versione specifica, che al momento ha come version number 2.0, ma sono certo che avranno tempo e modo di trasformare in 4.0, perchè, come dimostra anche Entity Framework, le novità da introdurre sono talmente tante che merita un salto di versione così elevato...&lt;/p&gt;&lt;p&gt;Ironia su queste sottigliezze&amp;#xa0;a parte, stando a &lt;a href="http://www.haacked.com/archive/2009/06/09/aspnetmvc-vs10beta1-roadmap.aspx" target="_blank"&gt;Phil Haack&lt;/a&gt;, PM di ASP.NET MVC, in beta 2 &amp;quot;rientreranno&amp;quot; diretti, senza necessità di installare add-on.&lt;/p&gt;&lt;p&gt;L'installer (con i template che mancano) si può scaricare da &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28527" target="_blank"&gt;&lt;strong&gt;CodePlex&lt;/strong&gt;&lt;/a&gt; (e la versione è la 1.1, anche se poi diventerà 2.0), con tanto di &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28527#DownloadId=71127" target="_blank"&gt;&lt;strong&gt;release notes&lt;/strong&gt;&lt;/a&gt;. Dove c'è anche la &lt;a href="http://aspnet.codeplex.com/Wiki/View.aspx?title=Road%20Map&amp;referringTitle=Home" target="_blank"&gt;&lt;strong&gt;roadmap&lt;/strong&gt;&lt;/a&gt; verso la 2.0, per ora molto fumosa.&lt;/p&gt;&lt;p&gt;Ci sono anche gli snippet per VS 2010, che sono davvero interessanti perchè semplificano il lavoro ripetitivo e sono una novità assoluta di questa versione per il markup (mentre c'erano già per il codice vero e proprio).&lt;/p&gt;&lt;p&gt;Non è dato sapere se ASP.NET MVC 2.0 sarà legato al .NET Framework 4.0, rilascio dopo, durante o prima la RTM. Pare che invece ci sarà comunque compatibilità con la &lt;strong&gt;versione 3.5 SP 1&lt;/strong&gt; e VS 2008 SP 1.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_MVC/" rel="tag"&gt;ASP.NET MVC&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2515/.NET-Framework-4.0-Beta-1-ASP.NET-MVC.aspx"&gt;&lt;em&gt;.NET Framework 4.0 beta 1: ASP.NET MVC&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, ASP.NET 4.0, ASP.NET MVC, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2515/.NET-Framework-4.0-Beta-1-ASP.NET-MVC.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2515/.NET-Framework-4.0-Beta-1-ASP.NET-MVC.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2515.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2515</trackback:ping></item><item><title>.NET Framework 4.0 beta 1: ASP.NET 4.0</title><link>http://blogs.aspitalia.com/daniele/post2496/.NET-Framework-4.0-Beta-1-ASP.NET-4.0.aspx</link><pubDate>Mon, 18 May 2009 13:31:36 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2496" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Il rilacio della beta 1 è fresco fresco, sia per abbonati MSDN che per il pubblico.&lt;/p&gt; &lt;p&gt;ASP.NET 4.0 non è una versione di rivoluzione in senso lato, ma di consolidamento delle attuali funzionalità, con l'aggiunta di alcune caratteristiche attese da tempo.&lt;/p&gt; &lt;p&gt;A prima vista la cosa più lampante è l'integrazione dei &lt;a href="http://www.aspitalia.com/focuson/1105/speciale-asp.net-charting-grafici-gusti.aspx"&gt;&lt;strong&gt;Charting Control&lt;/strong&gt;&lt;/a&gt;, che sono disponibili in maniera nativa e senza necessità di installazioni aggiuntive, oltre che il supporto per le nuove funzionalità &lt;strong&gt;AJAX&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Da questo punto di vista c'è una integrazione maggiore con &lt;strong&gt;jQuery&lt;/strong&gt;, un nuovo sistema di template client side, ed il supporto per il &lt;strong&gt;Live Data Binding&lt;/strong&gt;, una funzionalità in grado di creare scenari di data binding client side puri, sfruttando però sempre ASP.NET. Anche la client library AJAX ha subito diverse migliorie, mentre resta invariato il supporto per UpdatePanel &amp;amp; co.&lt;/p&gt; &lt;p&gt;Sul fronte dei dati, la nuova versione dei &lt;strong&gt;Dynamic Data Controls&lt;/strong&gt; permette un maggior controllo sul rendering (si possono ora specificare anche template per singole entità, senza necessità di cambiare il routing, ma agendo su un template posizionato all'interno di una directory) ed un vero sistema di ricerca, estensibile e personalizzabile.&lt;/p&gt; &lt;p&gt;Vengono supportate out-of-the box l'ereditarietà e le relazioni molti-a-molti (solo con Entity Framework, perchè LINQ to SQL non le supporta), oltre ai template per e-mail e URL.&lt;/p&gt; &lt;p&gt;Sul lato WebForm l'introduzione principale è quella del possibile controllo del &lt;strong&gt;ClientID&lt;/strong&gt;, che può essere generato in maniera agevole dallo sviluppatore, evitando gli ID automatici. Inoltre è stato introdotto il supporto per il &lt;strong&gt;Routing&lt;/strong&gt; in maniera definitiva e ci sono migliorie ai controlli &lt;strong&gt;FormView&lt;/strong&gt; e &lt;strong&gt;ListView&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Il &lt;strong&gt;ViewState&lt;/strong&gt; ora supporta una nuova modalità per cui può essere disabilitato a livello di pagina (o di controllo contenitore) e forzato solo a livello di singolo controllo. Con l'attuale versione, invece, il controllo contenuto eredita le caratteristiche del padre. Questa modifica consente di emettere un ViewState dalle dimensioni decisamente inferiori.&lt;/p&gt; &lt;p&gt;Anche browser capabilities e &lt;strong&gt;Cache&lt;/strong&gt; supportano il provider model, rendendo possibile l'estensione di attuali applicazioni senza necessità di modifiche e, nell'ultimo caso, anche l'utilizzo di sistemi di cache orizzontale, come &lt;a href="http://www.aspitalia.com/articoli/asp.net4/velocity.aspx"&gt;Velocity&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Il &lt;strong&gt;Session State&lt;/strong&gt;, inoltre consente di tenere compressi i dati qualora si sfruttino modalità di persistenza fuori dal processo (SQL Server e State Server), consentendo di abbattare l'occupazione di spazio all'interno dei rispettivi storage, perchè i dati sono compressi in fase di salvataggio e decompressi in fase di lettura.&lt;/p&gt; &lt;p&gt;Se utilizzato su &lt;strong&gt;IIS 7.5&lt;/strong&gt;, che sarà disponibile all'interno del prossimo Windows Server 2008 R2, sarà possibile fare il &lt;strong&gt;warm-up dell'application pool&lt;/strong&gt;, caricando già l'applicazione e senza necessità di tempi di attesa dovuti alla compilazione. Attraverso una classe che deve implementare la nuova interfaccia IProcessHostPreloadClient è possibile poi aggiungere il codice necessario a personalizzare questa specifica fase.&lt;/p&gt; &lt;p&gt;Le modifiche, ovviamente, interessano anche Visual Studio 2010, che ha un supporto migliorato per markup, CSS e Javacript. In particolare, ora VS 2010 supporta gli snippet anche all'interno del markup, rendendo l'inserimento di tipi particolari (e ripetitivi) di markup più semplice.&lt;/p&gt; &lt;p&gt;VS supporta inoltre un nuovo meccanismo di &lt;strong&gt;deployment&lt;/strong&gt;, che è in grado anche di garantire la &lt;strong&gt;trasformazione del web.config&lt;/strong&gt; in base alla modalità di compilazione. Questa caratteristica rende possibile avere, ad esempio, stringhe di connessioni differenti per i vari ambienti con un solo file generato in fase di deployment, che ora include anche un &lt;strong&gt;Web Packaging&lt;/strong&gt; specifico, che è in grado di generare un'installazione completa di tutto ciò di cui ha necessità il sito per effettuarne il deployment.&lt;/p&gt; &lt;p&gt;Maggiori informazioni e le informazioni per il download sono disponibili nel nostro mini-sito dedicato al &lt;a href="http://netfx4.winfxitalia.com/"&gt;.NET Framework 4.0&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_AJAX/" rel="tag"&gt;ASP.NET AJAX&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_Charting/" rel="tag"&gt;ASP.NET Charting&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Dynamic_Data_Control/" rel="tag"&gt;Dynamic Data Control&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/IIS/" rel="tag"&gt;IIS&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Server/" rel="tag"&gt;Windows Server&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2496/.NET-Framework-4.0-Beta-1-ASP.NET-4.0.aspx"&gt;&lt;em&gt;.NET Framework 4.0 beta 1: ASP.NET 4.0&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 4.0, ASP.NET 3.5, ASP.NET 4.0, ASP.NET AJAX, ASP.NET Charting, Databinding, Dynamic Data Control, IIS, Visual Studio, Windows Server</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2496/.NET-Framework-4.0-Beta-1-ASP.NET-4.0.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2496/.NET-Framework-4.0-Beta-1-ASP.NET-4.0.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2496.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2496</trackback:ping></item><item><title>Il primo whitepaper su ASP.NET 4.0 beta 1</title><link>http://blogs.aspitalia.com/daniele/post2485/Whitepaper-ASP.NET-4.0-Beta.aspx</link><pubDate>Fri, 17 Apr 2009 09:53:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2485" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;ASP.NET 4.0 beta 1 si avvicina. Se vi interessa, ieri è stato pubblicato un &lt;a href="http://www.asp.net/learn/whitepapers/aspnet40/"&gt;whitepaper&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A parte quanto già noto, emergono un po' di dettagli che secondo me vale la pena guardare.&lt;/p&gt;&lt;p&gt;La cosa interessante è che &lt;strong&gt;VS 2010&lt;/strong&gt; avrà il multi-targeting, cioè il&amp;#xa0;supporto per ASP.NET 2.0, 3.5 e 4.0 (caratteristica che ovviamente si estende alla rispettive versioni 2.0, 3.0, 3.5 e 4.0 del .NET Framework).&lt;/p&gt;&lt;p&gt;Ovviamente siamo carichi e pronti per fare la nostra parte non appena ci sarà la beta pubblica ;)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_4.0/" rel="tag"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_4.0/" rel="tag"&gt;ASP.NET 4.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Visual_Studio/" rel="tag"&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2485/Whitepaper-ASP.NET-4.0-Beta.aspx"&gt;&lt;em&gt;Il primo whitepaper su ASP.NET 4.0 beta 1&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework 4.0, ASP.NET 4.0, Visual Studio</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2485/Whitepaper-ASP.NET-4.0-Beta.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2485/Whitepaper-ASP.NET-4.0-Beta.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2485.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2485</trackback:ping></item><item><title>Fix per il .NET Framework 3.5 SP1</title><link>http://blogs.aspitalia.com/daniele/post2447/Fix-.NET-Framework-3.5-SP1.aspx</link><pubDate>Wed, 31 Dec 2008 09:47:38 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2447" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;E' uscito da ormai più di &lt;a href="http://www.aspitalia.com/focuson/1079/disponibile-fix-gdr-.net-framework-3.5-sp1.aspx"&gt;10 giorni&lt;/a&gt;. Vale la pena che lo segnali perchè corregge il problema riscontrato dopo la RTW del 3.5 SP1 con Dynamic Data ed Entity Framework, &lt;a href="http://blogs.aspitalia.com/daniele/post2444/dynamic-data-control-buona.aspx"&gt;segnalato qui&lt;/a&gt;. Inoltre, ed è giusto dare a Cesare quel che è di Cesare, il team di ASP.NET ha corretto tutto quello che ho segnalato all'epoca in &lt;a href="http://blogs.aspitalia.com/daniele/post2390/regressione-asp.net-3.5-sp.aspx"&gt;questo post&lt;/a&gt;. E, più in generale, ci sono un bel po' di bug risolti, tutti menzionati in questa &lt;a href="http://support.microsoft.com/kb/959209" target="_blank"&gt;KB&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ho già applicato la fix su diversi server con successo, dopo avevo necessità che venissero corrette le problematiche e per il momento non ho riscontrato controindicazioni. Vale sempre la regola di provare prima di mettere in deployment.&lt;/p&gt; &lt;p&gt;Queste fix saranno comunque integrate nella release del SP che farà la sua comparsa tra qualche giorno, durante l'anno nuovo, su Windows Update.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Databinding/" rel="tag"&gt;Databinding&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Dynamic_Data_Control/" rel="tag"&gt;Dynamic Data Control&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/daniele/post2447/Fix-.NET-Framework-3.5-SP1.aspx"&gt;&lt;em&gt;Fix per il .NET Framework 3.5 SP1&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2012 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Daniele Bochicchio</dc:creator><category>ASP.NET, .NET Framework, .NET Framework 3.5, ASP.NET 3.5, Databinding, Dynamic Data Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/daniele/post2447/Fix-.NET-Framework-3.5-SP1.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/daniele/post2447/Fix-.NET-Framework-3.5-SP1.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/daniele/CommentRSS2447.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2447</trackback:ping></item></channel></rss>
