ASP.NET MVC Workshop Día 3

62
Workshop ASP.NET MVC Día 3 Rodolfo Finochietti MVP ASP.NET/IIS Lagash Systems [email protected] @rodolfof

description

Introducción a ASP.NET y otras tecnologías asociadas

Transcript of ASP.NET MVC Workshop Día 3

Page 1: ASP.NET MVC Workshop Día 3

WorkshopASP.NET MVC

Día 3

Rodolfo FinochiettiMVP ASP.NET/IISLagash [email protected]@rodolfof

Page 2: ASP.NET MVC Workshop Día 3

Agenda

• jQuery• AJAX• Bundling y Minification• Script CDN• Web API• Soporte Asincrónico• SignalR

Page 3: ASP.NET MVC Workshop Día 3

jQuery

Page 4: ASP.NET MVC Workshop Día 3

jQuery

Selectors

Animations

Plugins

Page 5: ASP.NET MVC Workshop Día 3

jQuery Selectors

$(“#userName”)

$(“input:text”)

$(“.required”)

$(“#grid tr:even”)

Page 6: ASP.NET MVC Workshop Día 3

jQuery Animations

$(…).show() $(…).hide()

$(…).slideDown() $(…).slideUp()

$(…).fadeIn() $(…).fadeOut()

Page 7: ASP.NET MVC Workshop Día 3

jQuery Pluginshttp://plugins.jquery.com/

•Ajax (182)

•Animation and Effects (253)

•Browser Tweaks (67)

•Data (122)

•DOM (123)

•Drag-and-Drop (30)

•Events (119)

•Forms (317)

•Integration (88)

•JavaScript (130)

•jQuery Extensions (198)

•Layout (162)

•Media (108)

•Menus (80)

•Metaplugin (24)

•Navigation (131)

•Tables (64)

•User Interface (571)

•Utilities (291)

•Widgets (211)

•Windows and Overlays (89)

Page 8: ASP.NET MVC Workshop Día 3

AJAX

Page 9: ASP.NET MVC Workshop Día 3

Que es AJAX

AJAX (Asynchronous JavaScript And XML) es una técnica de desarrollo Web para crear aplicaciones interactivas mediante la combinación de tres tecnologías ya existentes.

Page 10: ASP.NET MVC Workshop Día 3

Que es AJAX• JavaScript - Para manejar el objeto XMLHttpRequest y DOM tratar para los

datos recibidos.

• HTML - Distribuye en la ventana del navegador los elementos de la aplicación y la información recibida por el servidor

• CSS - Define el aspecto de cada elemento y dato de la aplicación

• XML - Es el formato de los datos transmitidos del servidor al cliente (navegador) y que posteriormente serán mostrados.

• Lenguaje de servidor - Genera la información útil en XML y la envía al navegador.

Page 11: ASP.NET MVC Workshop Día 3

Funcionamiento • El usuario accede a la aplicación que es enviada por el servidor en formato HTML,

JavaScript y CSS.

• Luego el código JavaScript de la aplicación pide al servidor los datos que quiere mostrar y este, ejecuta un código de lado de servidor que envía al navegador los datos en formato XML.

• Cada vez que el usuario realiza una acción que significa mostrar unos datos, la capa

javascript, repite la acción anterior de manera invisible al usuario y muestra los datos deseados.

Page 12: ASP.NET MVC Workshop Día 3

Funcionamiento

Page 13: ASP.NET MVC Workshop Día 3

Bundling y Minification

Page 14: ASP.NET MVC Workshop Día 3

Minificar los scripts

• Remover los elementos innecesarios como espacios en blanco, nombres de función, comentarios de código, e instrucciones de trace y debug

• Para esto se puede usar la herramienta Microsoft Ajax Minifier– http://ajaxmin.codeplex.com/

14

Page 15: ASP.NET MVC Workshop Día 3

Bundling y Minificationen ASP.NET

• Mejora los tiempo de carga de los archives de JavaScript y CSS– Reduce el numero y el tamaño de los request

HTTP• Funciona por convención (no se requiere

configuración)• Completamente extensible y configurable

Page 16: ASP.NET MVC Workshop Día 3

Bundling y Minificationen ASP.NET

• Se declaran los bungles en el evento Application_Start del Globlal.asax

• Y se usa en la pagina o vista

Page 17: ASP.NET MVC Workshop Día 3

Script CDN

Page 18: ASP.NET MVC Workshop Día 3

Content Delivery Network (CDN)

18

EdgeCast

Akamai

Limelight

Cachefly

Page 19: ASP.NET MVC Workshop Día 3

Microsoft Ajax CDN

• Microsoft Ajax CDN es un host de las mas populares librerías JavaScript– El contenido esta cacheado en servidores

distribuidos geográficamente por todo el mundo– Soporta SSL– Están disponibles las versiones mimificadas y

debug

Page 20: ASP.NET MVC Workshop Día 3

Microsoft Ajax CDN

• Librerías:– jQuery (www.jquery.com)– jQuery UI (www.jqueryui.com)– jQuery Mobile (www.jquerymobile.com)– jQuery Validation (www.jquery.com)– jQuery Cycle (www.malsup.com/jquery/cycle)– jQuery DataTables (http://datatables.net)– Ajax Control Toolkit (www.outercurve.org)– ASP.NET Ajax– ASP.NET MVC JavaScript Files– ASP.NET SignalR JavaScript Files– Nuevas se agregan todo el tiempo

Page 21: ASP.NET MVC Workshop Día 3

Microsoft Ajax CDN

• Simple de usar– Solamente hay que referencia la librería que se

desea desde: http:///ajax.aspnetcdn.com<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>

– Soporta ScriptManager<asp:ScriptManager ID="ScriptManager1“ EnableCdn="true“ Runat="Server" />

Page 22: ASP.NET MVC Workshop Día 3

Microsoft Ajax CDN

• Fallback si el CDN no esta disponible

<script> // Fallback to loading jQuery from a local path if the CDN is unavailable (window.jQuery || document.write('<script src="/scripts/jquery-1.9.0.min.js"><\/script>')); </script>

Page 23: ASP.NET MVC Workshop Día 3

Demo

jQueryAjax

Bundling y MinificationScript CDN

Page 24: ASP.NET MVC Workshop Día 3

Work Time

Page 25: ASP.NET MVC Workshop Día 3

Web API

Page 26: ASP.NET MVC Workshop Día 3

Social Software Development

Page 27: ASP.NET MVC Workshop Día 3

Web API Growth

Source: www.programmableweb.com – current APIs: 4535

+ 100% + 50% + 3400% + 235% + 71% + 86% + 46% + 63%

Page 28: ASP.NET MVC Workshop Día 3

GET /en/html/dummy.php?name=MyName&married=not+single &male=yes HTTP/1.1Host: www.explainth.atUser-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: en-gb,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: http://www.explainth.at/en/misc/httpreq.shtml

Embrace HTTP¿Por que no WS-*?

Page 29: ASP.NET MVC Workshop Día 3

Métodos HTTP

Page 30: ASP.NET MVC Workshop Día 3

Para implementar Web API . . .

• Derivar ApiController• Implementar las acciones– Las acciones mapean a métodos HTTP– Prefijar los nombres de los métodos como el verbo HTTP deseado –

PostComment

– Usar [Get/Post/Put/Delete] si se prefiere un nombre diferente

Page 31: ASP.NET MVC Workshop Día 3

Ruta default en Web API

• routes.MapHttpRoute(– name: "DefaultApi",– routeTemplate: "api/{controller}/{id}",– defaults: new { id = RouteParameter.Optional }– );

Page 32: ASP.NET MVC Workshop Día 3

Demo

Web API

Page 33: ASP.NET MVC Workshop Día 3

Asynchronous Support

Page 34: ASP.NET MVC Workshop Día 3

Haciendo llamadas asincrónicas fácilmente

• Mejorar la respuesta y escalabilidad de las aplicaciones• Nuevas palabras clave “async” y “await”• Se puede usar await en casi cualquier código• Permite escribir código asincrónico que se lee como código sincrónico

Task<string> Op123Async(string s) { var tcs = new TaskCompletionSource<string>(); var state = 0; Action resume = delegate { switch (state) { case 0: Task<string> t1 = Op1Async(s); state = 1; t1.ContinueWith(resume); break; case 1: Task<string> t2 = Op2Async(t1.Result);...}

async Task<string> Op123Async(string s) { string s1 = await Op1Async(s); string s2 = await Op2Async(s1); string s3 = await Op3Async(s2); return s3;}

Page 35: ASP.NET MVC Workshop Día 3

Asynchronous Support• Porque async en el server?

– Porque nos permite usar de manera mas eficiente los recurso del Server

• Y como funciona?– Al momento de invocar a un resource remoto, el controller le cede el

control permitiendole reutilizar el thread mientras espera la respuesta.– Cuando la llamada remota se completa, el controller es re-scheduleado

para completar su ejecución.– Menor # de threads corriendo -> aumenta la escalabilidad

• El uso de async en el servicio no se expone a browsers/clientes– http://myserver.com/products -> la misma URL puede ser

implementada en ASP.NET usando un controller sincrónico o asincronico.

Page 36: ASP.NET MVC Workshop Día 3

Async tradicional en MVC

public class Products : AsyncController {

public void IndexAsync() {

    WebClient wc1 = new WebClient();

    AsyncManager.OutstandingOperations.Increment();

    wc1.DownloadStringCompleted += (sender, e) => {        AsyncManager.Parameters[“result"] = e.Result;        AsyncManager.OutstandingOperations.Decrement();    };

    wc1.DownloadStringAsync(new Uri("http://www.bing.com/")); }  public ActionResult IndexCompleted(string result) {    return View(); }}

Page 37: ASP.NET MVC Workshop Día 3

Async en MVC con .NET 4.5

public class Products : Controller {

public async Task<ActionResult> IndexAsync() {

WebClient web = new WebClient();

    string result = await web.DownloadStringTaskAsync("www.bing.com/");     return View(); }}

Page 38: ASP.NET MVC Workshop Día 3

Demo

Soporte Asincrónico

Page 39: ASP.NET MVC Workshop Día 3

Work Time

Page 40: ASP.NET MVC Workshop Día 3

SignalR

Page 41: ASP.NET MVC Workshop Día 3

¿Por que necesitamos aplicaciones real-time?

Page 42: ASP.NET MVC Workshop Día 3
Page 43: ASP.NET MVC Workshop Día 3
Page 44: ASP.NET MVC Workshop Día 3

¡Los usuarios quieren la ultima informacion AHORA!

Twitter – live searches/updates Stock streamersAuctionsLive scoresReal-time notificationsInteractive gamesCollaborative appsLive user analytics…

6

Page 45: ASP.NET MVC Workshop Día 3

¿Que tecnologias tenemos hoy?

Page 46: ASP.NET MVC Workshop Día 3

HTTP no esta preparado…Nunca se diseño para comunicaciones real-timeLa web es request-responseLa web es stateless

Para solucionar esto se invento HTML5 WebSockets

Page 47: ASP.NET MVC Workshop Día 3

HTTP/1.1 200 OKContent-Type: text/plainTransfer-Encoding: chunked

Forever Frame

– El server le dice al cliente que el response es chuncked– El cliente mantiene la coneccion abierta hasta que el servidor

la cierra– El servidor envia los datos al cliente seguido de un \0– Este proceso consume threads del servidor

Client

<script>eval("... ")</script>\0<script>eval("... ")</script>\0

Server

Page 48: ASP.NET MVC Workshop Día 3

Periodic polling

– Cada cierto tiempo el cliente pregunta si hay nuevos datos al servidor utilizando Ajax

– El tiempo de latencia minimo esta determiando por el “polling interval”

– Desperdicia ancho de banda y latencia

Polling intervalClient

Server

Page 49: ASP.NET MVC Workshop Día 3

Long polling

– El cliente pregunta pero el servidor no responde hasta que tenga datos nuevos para enviar

– El cliente pregunta de nuevo cuando los datos son recibidos o despues de que hay una time out en al coneccion

– Consume threads y conexiones del servidor

Client

Server

Page 50: ASP.NET MVC Workshop Día 3

HTML5 WebsocketsExtension de HTTP

Provee sockets sobre HTTP

Full-duplex

Funciona a travez de proxies

Todavia es un draft…

No todos los proxy servers lo soportan

No todos los webserver lo soportan

No todos los browsers lo soportan

¡Son sockets!

Page 51: ASP.NET MVC Workshop Día 3

En definitiva:¡Muchas opciones!

• Forever Frame• Periodic polling• Long polling• HTML5 WebSockets

Page 52: ASP.NET MVC Workshop Día 3

SignalR

¡3 en uno!• Conexiones “persistentes” entre cliente y

servidor sobre el mejor transporte• Abstrae el modelo de poolling subyasente• Provee un solo modelo de programacion

Page 53: ASP.NET MVC Workshop Día 3

DEMO

Hello SignalR

Page 54: ASP.NET MVC Workshop Día 3

¿Que paso?• El servidor hizo broadcasting del mensaje cada

pocos segundos• El cliente recibio los mensajes• ¡El codigo para todo esto es facil!• No hay polling (por lo menos no en el codigo)

Page 55: ASP.NET MVC Workshop Día 3

Dos modelos de conexionPersistentConnectionComunica 1..N clientesEs un IHttpHandlerRequiere que se defina una rutaLimitado a enviar mensajesEl usuario define el “protocolo”

HubsComunica 1..N clientesAbstraccion sobre PersistentConnectionLas rutas se mapean automaticamente (/signalr/hubs)Se pueden enviar mensajes y llamar a metodosSignalR define el protocolo

Page 56: ASP.NET MVC Workshop Día 3

Hubs• Los metodos de un Hub se pueden llamar

desde el cliente• Los metodos de un cliente se pueden llamar

desde el servidor– Se pueden llamar a clientes individuales– Se pueden llamar todos clientes– Se pueden llamar a grupos de clientes

Page 57: ASP.NET MVC Workshop Día 3

Demo

Hubs

Page 58: ASP.NET MVC Workshop Día 3

Clients

Page 59: ASP.NET MVC Workshop Día 3

Clientes

En el servidorSe puede hostear en cualquier aplicacion ASP.NET

En el clienteJavaScript

Pero hay mas…

Page 60: ASP.NET MVC Workshop Día 3

Clientes

En el servidor“SelfHost”Windows Azure

En el clienteJavaScriptCualquier aplicacion .NETCualquier dispositivo Windows PhoneiOSAndroid

Page 61: ASP.NET MVC Workshop Día 3

Contacto

• Mail:– [email protected]

• Blogs:– http://shockbyte.net

• Twitter:– @rodolfof

Page 62: ASP.NET MVC Workshop Día 3

¡Gracias!