SlideShare una empresa de Scribd logo
1 de 35
Introducción
a
ASP.NET Web API
Rodolfo Finochietti
MVP ASP.NET/IIS
Lagash Systems
rodolfof@lagash.com
@rodolfof
Social Software Development
Web API Growth
Source: www.programmableweb.com – current APIs: 4535
+ 100% + 50% + 3400% + 235% + 71% + 86% + 46% + 63%
Embrace HTTP
¿Por que no WS-*?
Representational state transfer (REST)
• REST (representational state transfer) es un estilo de
arquitectura de software para el intercambio de
contenido en ambientes Web
• Fue introducido en el año 2000 por Roy Fielding, uno
de los autores de HTTP
– “Architectural Styles and the Design of Network-based
Software Architectures”
• En general el termino es utilizado para describir
cualquier interfaz simple que sirva para transmitir
información sobre HTTP sin una capa de mensajería
adicional como SOAP, XML-RPC, Session tracking o
HTTP Cookies
Premisas
• Client–server
• Stateless
• Cacheable
• Layered system
• Uniform Interface
¿Que es una Web API?
Arquitectura HTTP
http://www.w3.org/TR/webarch
¿Cómo funciona HTTP?
Métodos HTTP
Requerimientos de un framework para
construir Web API’s
Alternativas para crear Web API’s
Alternativas para crear Web API’s
Características de ASP.NET Web API
• De ASP.NET MVC
• Link generation
• Testability
• IoC integration
• VS template
• Scaffolding
• De WCF Web API
• Server-side query composition
• Create custom help pages
• Self-host
• Tracing
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
Ruta default en Web API
• routes.MapHttpRoute(
– name: "DefaultApi",
– routeTemplate: "api/{controller}/{id}",
– defaults: new { id = RouteParameter.Optional }
– );
Demo
Web API
Media Types
• Determinan los formatos que entre cliente y
servidor
• Request:
• Response:
Media Types Formatters
• En Web API los Media Types determinan como
se serializan y deserializan el HTTP Body
• Para crear un media formatter se debe derivar
de:
– MediaTypeFormatter: Asincrónico
– BufferedMediaTypeFormatter: Sincrónico
Content Negotiation
• HTTP specification (RFC 2616) lo define como
“the process of selecting the best
representation for a given response when
there are multiple representations available.”
• Utilizando
– Accept:
– Accept-Charset
– Accept-Encoding
– Accept-Language
Content Negotiation
• El HTTP Dispatcher llama a la implementación de
IContentNegociator
– Este objeto es el encargado de determinar la mejor
representación posible
• Se llama al método Negotiate
– Type del objeto a serializar
– Colección de media formatters
– HTTP Request
• Devuelve el formatter a usar y el media type
– Si no se encuentra ningún formatter valido devuelve
null, y el cliente recibe un error HTTP 406
Demo
Media Types Formatters
Content Negotiation
Validation
• La validación se corre en el modelo en cada
Request
– Igual que en ASP.NET MVC
• Los errores de validación se acumulan en el
ModelState
• Se chequean con ModelState.IsValid
• Se pueden utilizar DataAnnotations o lógica
custom de validación
OData queries
• Soporte para sintaxis de OData URL query
– $top, $skip, $orderby, $filter
• Se habilita con el atributo [Queryable] y
retornando IQueryable<T> desde la acción
Web API Description
• Se puede usar IApiExplorer para obtener una
descripción de las Web API en runtime
• Útil para construir paginas de ayuda, clientes
de test, y herramientas
IApiExplorer
IApiExplorer apiExplorer =
config.Services.GetApiExplorer();
public interface IApiExplorer
{
Collection<ApiDescription> ApiDescriptions {
get; }
}
Demo
Validation
Web Api Description
OData Queries
Haciendo llamadas asincrónicas fácilmente
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;
}
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.
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();
}
}
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();
}
}
Demo
Soporte Asincrónico
Contacto
• Mail:
– rodolfof@lagash.com
• Blogs:
– http://shockbyte.net
• Twitter:
– @rodolfof
¡Gracias!

Más contenido relacionado

La actualidad más candente

Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Andrés Iturralde
 

La actualidad más candente (20)

.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
.Net Core Real time App on My Rasperry PI - Codemotion 2017 talk
 
Web Day Devops - Plain Concepts
Web Day Devops - Plain ConceptsWeb Day Devops - Plain Concepts
Web Day Devops - Plain Concepts
 
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
Construyendo las aplicaciones del futuro con visual studio 11 y .net framewor...
 
.NET Core
.NET Core.NET Core
.NET Core
 
ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2ASP.NET MVC Workshop Día 2
ASP.NET MVC Workshop Día 2
 
Go
GoGo
Go
 
Plainconcepts .Net Core Event - Real Time Applications
Plainconcepts .Net Core Event - Real Time ApplicationsPlainconcepts .Net Core Event - Real Time Applications
Plainconcepts .Net Core Event - Real Time Applications
 
Zend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, ColombiaZend Framework Taller de SeeD Software, Colombia
Zend Framework Taller de SeeD Software, Colombia
 
NodeJS
NodeJSNodeJS
NodeJS
 
Netcoreconf 2020 - Gammification with Microsoft Learn
Netcoreconf 2020 - Gammification with Microsoft LearnNetcoreconf 2020 - Gammification with Microsoft Learn
Netcoreconf 2020 - Gammification with Microsoft Learn
 
dockerize.it
dockerize.itdockerize.it
dockerize.it
 
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk   AWS Roadshow Bogota MexicoIntroduccion a Elastic Beanstalk   AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
Creacion Apirest Back{4}app
Creacion Apirest Back{4}appCreacion Apirest Back{4}app
Creacion Apirest Back{4}app
 
Integración y Entrega Continua con Visual Studio Online
Integración y Entrega Continua con Visual Studio OnlineIntegración y Entrega Continua con Visual Studio Online
Integración y Entrega Continua con Visual Studio Online
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 
Azure infrastructure testing con inspec
Azure infrastructure testing con inspecAzure infrastructure testing con inspec
Azure infrastructure testing con inspec
 
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring BootSOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
 
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 

Similar a Introducción a ASP.NET Web API

SP2010 evolución vs evolución
SP2010 evolución vs evoluciónSP2010 evolución vs evolución
SP2010 evolución vs evolución
goreorti
 

Similar a Introducción a ASP.NET Web API (20)

Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Documertar APIs - Meetup.js
Documertar APIs - Meetup.jsDocumertar APIs - Meetup.js
Documertar APIs - Meetup.js
 
SEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptxSEVILLA Meetups29112022_sh.pptx
SEVILLA Meetups29112022_sh.pptx
 
Protocol HTTP
Protocol HTTPProtocol HTTP
Protocol HTTP
 
12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del Proyecto12-Unidad 3: Webservices-3.3 Inicio del Proyecto
12-Unidad 3: Webservices-3.3 Inicio del Proyecto
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
APIs REST
APIs RESTAPIs REST
APIs REST
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
Estrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepointEstrategias de desarrollo en sharepoint
Estrategias de desarrollo en sharepoint
 
Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010
 
Webservices
WebservicesWebservices
Webservices
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSH
 
Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptx
 
Api rest ful
Api rest fulApi rest ful
Api rest ful
 
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptxArquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
 
Semana 7 Servicios Web API REST con Mongodb
Semana 7   Servicios Web API REST con MongodbSemana 7   Servicios Web API REST con Mongodb
Semana 7 Servicios Web API REST con Mongodb
 
SP2010 evolución vs evolución
SP2010 evolución vs evoluciónSP2010 evolución vs evolución
SP2010 evolución vs evolución
 

Más de Rodolfo Finochietti

Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladoresQue hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Rodolfo Finochietti
 

Más de Rodolfo Finochietti (20)

Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programming
 
C#: Past, Present and Future
C#: Past, Present and FutureC#: Past, Present and Future
C#: Past, Present and Future
 
Re-bot-lution
Re-bot-lutionRe-bot-lution
Re-bot-lution
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
Despliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
Despliegue y Monitoreo de aplicaciones ASP.NET Core en LinuxDespliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
Despliegue y Monitoreo de aplicaciones ASP.NET Core en Linux
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
Azure IoT Hub
Azure IoT HubAzure IoT Hub
Azure IoT Hub
 
Introduccion a Node.js
Introduccion a Node.jsIntroduccion a Node.js
Introduccion a Node.js
 
IoT y Dispositivos
IoT y DispositivosIoT y Dispositivos
IoT y Dispositivos
 
.NET Multiplataforma
.NET Multiplataforma .NET Multiplataforma
.NET Multiplataforma
 
Windows 10 Developer Readiness
Windows 10 Developer ReadinessWindows 10 Developer Readiness
Windows 10 Developer Readiness
 
ASP.NET 5
ASP.NET 5ASP.NET 5
ASP.NET 5
 
Roslyn: el futuro de C#
Roslyn: el futuro de C#Roslyn: el futuro de C#
Roslyn: el futuro de C#
 
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNextMicrosoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
 
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
Que hay de nuevo en Visual Studio 2013 y ASP.NET 5.1
 
Proyectos de Base de Datos con Visual Studio 2013
Proyectos de Base de Datos con Visual Studio 2013Proyectos de Base de Datos con Visual Studio 2013
Proyectos de Base de Datos con Visual Studio 2013
 
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladoresQue hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
Que hay de nuevo en 2013 en la plataforma Microsoft para desarrolladores
 
ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1
 
HTML5 Media Queries
HTML5 Media QueriesHTML5 Media Queries
HTML5 Media Queries
 
HTML5 Offline
HTML5 OfflineHTML5 Offline
HTML5 Offline
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 

Introducción a ASP.NET Web API

  • 1. Introducción a ASP.NET Web API Rodolfo Finochietti MVP ASP.NET/IIS Lagash Systems rodolfof@lagash.com @rodolfof
  • 3. Web API Growth Source: www.programmableweb.com – current APIs: 4535 + 100% + 50% + 3400% + 235% + 71% + 86% + 46% + 63%
  • 5. Representational state transfer (REST) • REST (representational state transfer) es un estilo de arquitectura de software para el intercambio de contenido en ambientes Web • Fue introducido en el año 2000 por Roy Fielding, uno de los autores de HTTP – “Architectural Styles and the Design of Network-based Software Architectures” • En general el termino es utilizado para describir cualquier interfaz simple que sirva para transmitir información sobre HTTP sin una capa de mensajería adicional como SOAP, XML-RPC, Session tracking o HTTP Cookies
  • 6. Premisas • Client–server • Stateless • Cacheable • Layered system • Uniform Interface
  • 7. ¿Que es una Web API?
  • 11. Requerimientos de un framework para construir Web API’s
  • 12. Alternativas para crear Web API’s
  • 13. Alternativas para crear Web API’s
  • 14.
  • 15. Características de ASP.NET Web API • De ASP.NET MVC • Link generation • Testability • IoC integration • VS template • Scaffolding • De WCF Web API • Server-side query composition • Create custom help pages • Self-host • Tracing
  • 16. 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
  • 17. Ruta default en Web API • routes.MapHttpRoute( – name: "DefaultApi", – routeTemplate: "api/{controller}/{id}", – defaults: new { id = RouteParameter.Optional } – );
  • 19. Media Types • Determinan los formatos que entre cliente y servidor • Request: • Response:
  • 20. Media Types Formatters • En Web API los Media Types determinan como se serializan y deserializan el HTTP Body • Para crear un media formatter se debe derivar de: – MediaTypeFormatter: Asincrónico – BufferedMediaTypeFormatter: Sincrónico
  • 21. Content Negotiation • HTTP specification (RFC 2616) lo define como “the process of selecting the best representation for a given response when there are multiple representations available.” • Utilizando – Accept: – Accept-Charset – Accept-Encoding – Accept-Language
  • 22. Content Negotiation • El HTTP Dispatcher llama a la implementación de IContentNegociator – Este objeto es el encargado de determinar la mejor representación posible • Se llama al método Negotiate – Type del objeto a serializar – Colección de media formatters – HTTP Request • Devuelve el formatter a usar y el media type – Si no se encuentra ningún formatter valido devuelve null, y el cliente recibe un error HTTP 406
  • 24. Validation • La validación se corre en el modelo en cada Request – Igual que en ASP.NET MVC • Los errores de validación se acumulan en el ModelState • Se chequean con ModelState.IsValid • Se pueden utilizar DataAnnotations o lógica custom de validación
  • 25. OData queries • Soporte para sintaxis de OData URL query – $top, $skip, $orderby, $filter • Se habilita con el atributo [Queryable] y retornando IQueryable<T> desde la acción
  • 26. Web API Description • Se puede usar IApiExplorer para obtener una descripción de las Web API en runtime • Útil para construir paginas de ayuda, clientes de test, y herramientas
  • 27. IApiExplorer IApiExplorer apiExplorer = config.Services.GetApiExplorer(); public interface IApiExplorer { Collection<ApiDescription> ApiDescriptions { get; } }
  • 29. Haciendo llamadas asincrónicas fácilmente 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; }
  • 30. 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.
  • 31. 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(); } }
  • 32. 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(); } }
  • 34. Contacto • Mail: – rodolfof@lagash.com • Blogs: – http://shockbyte.net • Twitter: – @rodolfof

Notas del editor

  1. Use HTTP as an Application Protocol – not a Transport Protocol