What's New in ASP.NET 4.5 and Visual Studio 2012

Preview:

DESCRIPTION

Slide e codice lo potete trovare a questo link: http://blog.dottor.net/post/2012/09/18/Codice-e-slide-della-sessione-Whats-New-in-ASPNET-45-and-Visual-Studio-2012.aspx Il Microsoft .NET Framework è in continua evoluzione, e con la prossima versione verranno rilasciate interessanti funzionalità riguardanti ASP.NET.All'interno di questa sessione conosceremo tutte queste novità, ed andremo invece più in dettaglio in alcune di esse, permettendo a chi conosce già ASP.NET di poter essere più produttivo (Strongly Typed Data Controls, Model Binding, Asynchronous, WebSocket, ... ), mentre, per chi invece non ha molta esperienza con questa tecnologia, potrà vedere come i nuovi template di progetto e Visual Studio 2012 potranno aiutarlo ad approcciare correttamente queste tipologie di applicazioni.

Citation preview

• Andrea Dottor – Microsoft MVP ASP.NET/IIS

What's New in ASP.NET 4.5 and Visual Studio 2012

feedback

10

o Feedback su:

• http://xedotnet.org/feedback

Email: andrea@dottor.netBlog: http://blog.dottor.netTwitter: http://twitter.com/dottor

Contatti

3

Agenda

Visual Studio 2012 Editor

ASP.NET 4.5 WebForm

Security

Performance

ASP.NET 4.5 MVC 4 (nel parleremo nel meeting «Sviluppo di applicazioni mobile con ASP.NET MVC 4»)

Visual Studio2012

ASP.NET Editor

5

HTML Editor – cosa c’è di nuovo?

Supporto ad HTML5

Migliorato intellisense

Maggiori snippet

Pieno supporto agli attributi WAI-ARIA

Smart Tag anche in modalità source

Generazione automatica degli Event handler

Extract to user control

6

CSS Editor – cosa c’è di nuovo?

Introduzione degli snippet

Intellisense anche nella creazione dei selettori

Color picker

Supporto ai commenti (da shortcuts)

Vendor specific schemas

Indentazione gerarchica

7

JavaScript Editor – cosa c’è di nuovo?

Migliorato intellisense

Intellisense filtrato a seconda del contesto, del tipo di dato, ...

DOM Intellisense, aggiunto supporto ad HTML5

Intellisense abilitato in tutti i file javascript, centralizzando i

/// <reference /> in un’unico file

VSDOC signature overloads

Aggiunta la funzionalità Go to Definition

8

Page Inspector

Apre il website all’interno di visual studio

Fornisce funzionalità simili alla Developer Toolbar

Analisi dell’HTML della pagina

Analisi del singolo elemento nel DOM della pagina

Visione degli stili applicati

Permette di capire quale controllo/codice abbia generato l’HTML

Permette di trovare il sorgente di un preciso stile CSS

ASP.NET 4.5

WebForm

10

Strongly Typed Data Controls

Permette di avere l’intellisense per specificare i campi da porre in binding

Nei Data Control è stata aggiunta una proprietà ItemType dove specificare il tipo di dato in binding

Item.* e BindItem.* per specificare le proprietà in binding<asp:FormView runat="server" ID="editCustomer" ItemType="Dottor.SampleApplication.Employee">        <EditItemTemplate>           <div>                 <asp:TextBox ID="firstName" runat="server" Text='<%# BindItem.FirstName %>' />           </div>           <div>                 <asp:TextBox ID="lastName" runat="server" ='<%# BindItem.LastName %>' />           </div>           <asp:Button runat="server" CommandName="Update"/>        </EditItemTemplate></asp:FormView>

11

Model Binding - Selecting data

Aggiunta delle funzionalità di «data source» ai Data Control di ASP.NET

es: GridView, ListView, FormView, ...

Prende spunto dal model binding di ASP.NET MVC

Consumo di dati esposti come IEnumerable o IQuerable<asp:GridView ID="categoriesGrid" runat="server"        AutoGenerateColumns="false"        AllowSorting="true" AllowPaging="true" PageSize="5"        ItemType="WebApplication1.Model.Category" DataKeyNames="CategoryID"        SelectMethod="GetCategories"        UpdateMethod="UpdateCategory">

[...]

<asp:GridView ID="categoriesGrid" runat="server"        AutoGenerateColumns="false"        AllowSorting="true" AllowPaging="true" PageSize="5"        ItemType="WebApplication1.Model.Category" DataKeyNames="CategoryID"        SelectMethod="GetCategories"        UpdateMethod="UpdateCategory">

[...]

12

Model Binding - Value providers

Nuovi attributi da associare ai parametri di un metodo, che permettono di specificare da dove recuperare le informazioni/valore

Stesso comportamento dei Parameter dei controlli DataSource

es: QueryStringAttributepublic IQueryable<Product> GetProducts([QueryString]string keyword){

[...]

public IQueryable<Product> GetProducts([QueryString]string keyword){

[...]

13

Model Binding - Filtering by values from a control

Tramite attributi è possibile recuperare valori anche da controlli contenuti all’interno della pagina

Nel costruttore degli attributi è possibile specificare il nome del campo o del controllo da utilizzare per recuperare il datopublic IQueryable<Product> GetProducts(        [QueryString("q")] string keyword,        [Control("categories")] int? categoryId) {

[...]

public IQueryable<Product> GetProducts(        [QueryString("q")] string keyword,        [Control("categories")] int? categoryId) {

[...]

14

Bundling and Optimization

Bundling: permette di unire più file JavaScript e CSS in un unico file

Minification: rimozione degli spazi ed altri caratteri «non utili», in modo da ridurre la dimensione dei file

PRO: Ottimizzazione delle requestPRO: Meno byte che transitano

Possibilità di differenziare gli script tra debug e release tramite l’attributo debug del tag compilation nel web.config

Vedere il file BundleConfig.cs dentro la carella App_Start e il file Bundle.config

15

Bundling and Optimization

Using B/M Without B/M Change

File Requests 9 34 256%

KB Sent 3.26 11.92 266%

KB Received 388.51 530 36%

Load Time 510 MS 780 MS 53%

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

16

OAuth in the Default Templates

Nei template di default è stata aggiunta la possibilità di eseguire login tramite le credenziali di vari social network utilizzando l’autenticaizone Oauth

Basato sulla libreria DotNetOpenAuth

Login tramite Microsoft Account, Facebook, Twitter, Google

Possibilità di aggiunta di altri provider di autenticazione

Vedere il file AuthConfig.cs dentro la carella App_Start

http://blogs.msdn.com/b/webdev/archive/2012/08/15/oauth-openid-support-for-webforms-mvc-and-webpages.aspx

17

Support for WebSockets Protocol

WebSockets è un protocollo standard che permette la comunicazione tra client e server

Fornisce una comunicazione long-running

Con ASP.NET 4.5 sono state aggiunte classi che permettono l’utilizzo di WebSocket in modo asincrono System.Web.WebSockets

Le Web Sockets API rientrano tra le specifiche di HTML5http://www.w3.org/TR/2009/WD-websockets-20091222/

Solamente con ASP.NET 4.5 su IIS 8

Security

Image Credit: InThePersonalCloud

19

New ASP.NET Request Validation Features

Deferred ("lazy") request validationi dati in post vengono validati solo quando

vengono letti

Possibilità di accedere ai dati senza che venga eseguita la validazione tramite HttpRequest.Unvalidated

vengono validati i dati contenuti in Form, QueryString, Cookies, e Url<httpRuntime requestValidationMode="4.5" ... />

var s = context.Request.Unvalidated.Form["blog_post"];

20

AntiXSS Library

Vista la popolarità di Microsoft AntiXSS Library, questa è stata inclusa all’interno del framework all’interno del namespace System.Web.Security

E’ disponibile anche su codeplex http://wpl.codeplex.com/

Permette di eseguire l’encoding delle stringhe che devono comparire all’interno dell’HTML, permettendo (tramite opportuni algoritmi) di non far passare eventuali attacchi XSS

Può essere sostituita a quella di default utilizzata da ASP.NET

<httpRuntime ...  encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Performance

22

Support for await and Task-Based Asynchronous Modules and Handlers

Creazione di HttpHandler e HttpModule asincroni con il supporto di async-await

Alleggeriscono/migliorano il carico sul server in quanto ottimizzano l’uso dei thread

Per un HttpHandler, di deve implementare HttpTaskAsyncHandlerpublic class MyAsyncHandler : HttpTaskAsyncHandler{        public override async Task ProcessRequestAsync(HttpContext context)        {           // Do something        }}

23

Support for await and Task-Based Asynchronous Modules and Handlers

Per un HttpModule utilizzare i metodi di helper esposti dalla classe EventHandlerTaskAsyncHelper in modo da permettere l’uso di metodi asincroni all’interno della normale pipeline di ASP.NET che è sincronapublic void Init(HttpApplication context){   EventHandlerTaskAsyncHelper helper = 

new EventHandlerTaskAsyncHelper(MioMetodoAsincrono);    context.AddOnPostAuthorizeRequestAsync(

helper.BeginEventHandler, helper.EndEventHandler);

}

24

Web Publishing Improvements

Le informazione relative ai profili di pubblicazione vengono salvati all’interno della cartella PublishProfiles

Possibilità di condividere le informazioni tra i membri del team

Possibilità di salvare le informazioni nel controllo sorgente

Possono venire utilizzate da msbuild.exe per pubblicare l’applicazione dopo la compilazione

msbuild.exe project.csproj /t:WebPublish /p:PublishProfile=ProfileName

25

Multi-Core JIT compilation for faster startup

Nel Framework 4.5 il compilatore JIT è stato migliorato / ottimizzato per l’utilizzo di più core

Riduzione dei tempi del primo avvio di un’applicazione

Abilitato di default per le applicazione ASP.NET

26

ASP.NET precompilation and merge

Possibilità di precompilare una Web Application

Permette di ridurre ulteriormente i tempi del primo avvio dell’applicazione

Per attivarlo, settare il flag «precompile this application before publishing» nelle proprietà del progetto

Domande? Dubbi?Voglia di migrare subito ad ASP.NET 4.5?

28

Voglio sperimentare una nuova strada

Screencast pubblicati su

Iniziando dal materiale di questo meeting

6 video già registrati e pronti ad uscire

40 minuti di video

A partire dalla prossima settimana

Aspetto un vostro feedback

http://www.youtube.com/user/andreadottor

feedback

10

o Feedback su:

• http://xedotnet.org/feedback

Email: andrea@dottor.netBlog: http://blog.dottor.netTwitter: http://twitter.com/dottor

Contatti