{"id":84,"date":"2015-05-14T10:58:37","date_gmt":"2015-05-14T10:58:37","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=84"},"modified":"2015-05-14T10:58:37","modified_gmt":"2015-05-14T10:58:37","slug":"azure-webjobs-actualizando-datos-en-background","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/","title":{"rendered":"Azure WebJobs | Actualizando datos en background"},"content":{"rendered":"<p>En el <a href=\"http:\/\/blogs.encamina.com\/en-tu-casa-o-en-la-mia\/2015\/04\/16\/introduccion-azure-webjobs-conceptos-basicos\/\">art\u00edculo anterior<\/a> expuse las bondades que nos ofrece este servicio de Azure Web Jobs as\u00ed como la versatilidad a la hora de poder realizar tareas muy diversas que extiendan la funcionalidad de nuestros sitios consiguiendo que no sean s\u00f3lo p\u00e1ginas web de contenido sino que alcancen la excelencia de las aplicaciones web pudiendo tratar la informaci\u00f3n y realizando tareas automatizadas.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-79\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg\" alt=\"webjobs-poster\" width=\"650\" height=\"300\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg 650w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster-300x138.jpg 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a><!--more--><\/p>\n<p>En esta ocasi\u00f3n veremos un <strong>ejemplo pr\u00e1ctico de aplicaci\u00f3n de un WebJob<\/strong> para procesar informaci\u00f3n de un sitio web que muestra datos extra\u00eddos de <a href=\"http:\/\/www.opendatacanarias.es\/\">Open Data Canarias<\/a>, en concreto de <a href=\"http:\/\/www.opendatacanarias.es\/datos\/dataset\/tdt-playas-de-tenerife\">las playas de la isla de Tenerife<\/a>.<\/p>\n<p>Como se puede observar en el enlace de la fuente de datos, podemos obtener la informaci\u00f3n en CSV, JSON y XML pero, entre todos los campos hay algunos que pueden variar en cortos espacios de tiempo y, adem\u00e1s, no disponemos de foto de las mismas, algo que se podr\u00eda considerar esencial. Por lo tanto, <strong>el objetivo del WebJob ser\u00e1 el de almacenar los datos obtenidos de la fuente de datos en un Table Storage de Azure y adem\u00e1s, le pondr\u00e1 la URL de una imagen sacada de una b\u00fasqueda de Bing<\/strong> en un campo destinado a ello.<\/p>\n<h2>Desgranando el WebJob<\/h2>\n<p><strong>El WebJob<\/strong> que usaremos ser\u00e1 un sencillo proyecto de consola que <strong>se conectar\u00e1 a la fuente de los datos para obtener los elementos actuales<\/strong> y, posteriormente har\u00e1 lo propio a <strong>una cuenta de Azure Storage donde se guardar\u00e1n<\/strong> los mismos <strong>junto con la imagen<\/strong> obtenida del servicio de Bing.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-89\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-structure.png\" alt=\"webjob-structure\" width=\"449\" height=\"395\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-structure.png 449w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-structure-300x264.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/p>\n<div style=\"overflow: scroll;width: 650px\"><span style=\"color: #003366\"><span style=\"font-family: Consolas\">class<\/span>\u00a0<span style=\"font-family: Consolas\">Program<br \/>\n<\/span>{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">public<\/span>\u00a0<span style=\"font-family: Consolas\">static<\/span>\u00a0<span style=\"font-family: Consolas\">string<\/span>\u00a0StorageConnectionString\u00a0{\u00a0<span style=\"font-family: Consolas\">get<\/span>;\u00a0<span style=\"font-family: Consolas\">set<\/span>;\u00a0}<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">static<\/span>\u00a0<span style=\"font-family: Consolas\">void<\/span>\u00a0Main(<span style=\"font-family: Consolas\">string<\/span>[]\u00a0args)<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0StorageConnectionString\u00a0=\u00a0<span style=\"font-family: Consolas\">\u00abDefaultEndpointsProtocol=https;AccountName=tenerifebeachsstorage;AccountKey=gtGWx+8u2p1SWDHNNDGt+Bx3ar09klj83wPP0VIOQA6FasOawSCnLcTdYg6EkImfjc4EZwBZXCWOqnaTXnOBhw==\u00bb<\/span>;<\/span><span style=\"color: #003366\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">var<\/span>\u00a0beachs\u00a0=\u00a0GetBeachs();<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0SaveBeachs(beachs);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0}<\/span><span style=\"color: #003366\">\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">private<\/span>\u00a0<span style=\"font-family: Consolas\">static<\/span>\u00a0<span style=\"font-family: Consolas\">List<\/span>&lt;<span style=\"font-family: Consolas\">BeachJson<\/span>&gt;\u00a0GetBeachs()<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">var<\/span>\u00a0dataService\u00a0=\u00a0<span style=\"font-family: Consolas\">new<\/span>\u00a0BeachService();<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">var<\/span>\u00a0data\u00a0=\u00a0dataService.Get();<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">return<\/span>\u00a0data;<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0}<\/span><\/p>\n<p><span style=\"color: #003366\">\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">private<\/span>\u00a0<span style=\"font-family: Consolas\">static<\/span>\u00a0<span style=\"font-family: Consolas\">void<\/span>\u00a0SaveBeachs(<span style=\"font-family: Consolas\">List<\/span>&lt;<span style=\"font-family: Consolas\">BeachJson<\/span>&gt;\u00a0beachs)<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">var<\/span>\u00a0storageService\u00a0=\u00a0<span style=\"font-family: Consolas\">new<\/span>\u00a0BeachStorageService(StorageConnectionString);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0storageService.SaveList(beachs);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #003366\"> }<\/span><\/p>\n<\/div>\n<p>Para abstraer el c\u00f3digo que obtiene y guarda los elementos, he creado una clase\/servicio en otro proyecto para que pueda ser reutilizable por otros elementos de mi soluci\u00f3n o incluso expuesto al exterior por Api REST desde Web Api.<\/p>\n<p>Lo m\u00e1s rese\u00f1able de este servicio, es el m\u00e9todo para guardar los elementos. Como es posible que haya nuevos elementos o que se eliminen algunos de los existentes, la idea es eliminar los datos de TableStorage (29 registros) y volver a cargarlos con la imagen correspondiente.<\/p>\n<p><span style=\"color: #003366\"><span style=\"font-family: Consolas\">public<\/span>\u00a0<span style=\"font-family: Consolas\">bool<\/span>\u00a0SaveList(<span style=\"font-family: Consolas\">List<\/span>&lt;<span style=\"font-family: Consolas\">BeachJson<\/span>&gt;\u00a0list)<\/span><br \/>\n<span style=\"color: #003366\"> {<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">try<br \/>\n<\/span>\u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0TruncateTable();<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">foreach<\/span>\u00a0(<span style=\"font-family: Consolas\">var<\/span>\u00a0item\u00a0<span style=\"font-family: Consolas\">in<\/span>\u00a0list)<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">var<\/span>\u00a0beach\u00a0=\u00a0<span style=\"font-family: Consolas\">new<\/span>\u00a0<span style=\"font-family: Consolas\">Beach<\/span>(item);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0beach.Picture\u00a0=\u00a0GetPictureUrl(<span style=\"font-family: Consolas\">\u00abTenerife\u00a0\u00ab<\/span>\u00a0+\u00a0item.Title\u00a0+\u00a0<span style=\"font-family: Consolas\">\u00bb\u00a0\u00ab<\/span>\u00a0+item.County);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">TableOperation<\/span>\u00a0insertOperation\u00a0=\u00a0<span style=\"font-family: Consolas\">TableOperation<\/span>.Insert(beach);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">this<\/span>.Context.Execute(insertOperation);<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">return<\/span>\u00a0<span style=\"font-family: Consolas\">true<\/span>;<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">catch<\/span>\u00a0(<span style=\"font-family: Consolas\">Exception<\/span>)<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0{<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"font-family: Consolas\">return<\/span>\u00a0<span style=\"font-family: Consolas\">false<\/span>;<\/span><br \/>\n<span style=\"color: #003366\"> \u00a0\u00a0\u00a0\u00a0}<\/span><br \/>\n<span style=\"color: #003366\"> }<\/span><\/p>\n<h2>Asociando el WebJob al sitio web<\/h2>\n<p>Como vimos en el <a href=\"http:\/\/blogs.encamina.com\/en-tu-casa-o-en-la-mia\/2015\/04\/16\/introduccion-azure-webjobs-conceptos-basicos\/\">art\u00edculo anterior<\/a>, hay <strong>varias formas de publicar el WebJob<\/strong> asociado al sitio web. En esta ocasi\u00f3n lo har\u00e9 <strong>desde Visual Studio, asociando el proyecto de consola que ejecuta las tareas de actualizaci\u00f3n al proyecto MVC 4.5<\/strong> que se corresponde con el WebSite.<\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-associate.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-87\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-associate.png\" alt=\"webjob-associate\" width=\"650\" height=\"310\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-associate.png 1299w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-associate-300x143.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-associate-1024x488.png 1024w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a> <a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-publish.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-88\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-publish.png\" alt=\"webjob-publish\" width=\"650\" height=\"349\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-publish.png 1156w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-publish-300x161.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-publish-1024x550.png 1024w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<p>Como se puede ver, <strong>el WebJob se ejecutar\u00e1 de forma peri\u00f3dica una vez al d\u00eda, a las 12.00 AM (00:00)<\/strong>, de esta forma, intentaremos minimizar el impacto causado a nuestros visitants, aunque habr\u00eda que analizar cu\u00e1ndo tenemos menos visitas en nuestro WebSite para establecer la hora adecuada de ejecuci\u00f3n.<\/p>\n<h2>Publicando el Web Site<\/h2>\n<p><span style=\"color: #333333;font-family: 'Georgia',serif\">Una vez asociado el WebJob, procedemos a <strong>publicar el WebSite desde Visual Studio<\/strong> y tras hacerlo, <strong>podremos comprobar c\u00f3mo nos aparece el WebJob publicado en el nodo correspondiente del navegador de Servidor<\/strong>.<\/span><\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-published.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-92\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-published.png\" alt=\"webjob-published\" width=\"429\" height=\"395\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-published.png 429w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/webjob-published-300x276.png 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a><\/p>\n<h2>Viendo los resultados<\/h2>\n<p><span style=\"color: #333333;font-family: 'Georgia',serif\">Una vez tenemos todo publicado, podemos <a href=\"http:\/\/tenerifebeachs.azurewebsites.net\/\"><span style=\"color: #0563c1\">navegar la WebSite<\/span><\/a> para comprobar si todo ha funcionado correctamente (como as\u00ed esperamos).<\/span><\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-home.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-91\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-home.png\" alt=\"website-home\" width=\"650\" height=\"439\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-home.png 1449w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-home-300x203.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-home-1024x692.png 1024w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<p><span style=\"color: #333333;font-family: 'Georgia',serif\">Una vez estamos en la portada, navegando a la opci\u00f3n \u201cPlayas\u201d aparecer\u00e1 un listado con las playas obtenidas desde Table Storage, con la imagen obtenida desde el servicio de Bing, adem\u00e1s de mostrarlas en el mapa.<\/span><\/p>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-beachs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-90\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-beachs.png\" alt=\"website-beachs\" width=\"650\" height=\"439\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-beachs.png 1449w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-beachs-300x203.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/05\/website-beachs-1024x692.png 1024w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/a><\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p><span style=\"color: #333333;font-family: 'Georgia',serif\">Como hemos podido comprobar, operaciones para extender nuestros sitios web, que en el pasado deb\u00edamos hacer con un Cloud Service, con el consiguiente aumento de coste mensual, podemos realizarla ahora dentro del contexto de un Web Site despreocup\u00e1ndonos un poco del coste porque se usa el procesamiento de este mismo.<\/span><\/p>\n<p>&nbsp;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>En el art\u00edculo anterior expuse las bondades que nos ofrece este servicio de Azure Web Jobs as\u00ed como la versatilidad a la hora de poder realizar tareas muy diversas que extiendan la funcionalidad de nuestros sitios consiguiendo que no sean &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":22,"featured_media":79,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,13,33,10,4,1],"tags":[8,36,34,40],"class_list":["post-84","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-app-services","category-azure-web-sites","category-azure-webjobs","category-azure-websites","category-microsoft-azure","category-sin-categoria","tag-azure","tag-azure-webapps","tag-azure-webjobs","tag-azure-websites"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Azure WebJobs para actualizar datos en background<\/title>\n<meta name=\"description\" content=\"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure WebJobs | Actualizando datos en background\" \/>\n<meta property=\"og:description\" content=\"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site\" \/>\n<meta property=\"og:url\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-14T10:58:37+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"650\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Santiago Porras Rodr\u00edguez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@saintwukong\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Santiago Porras Rodr\u00edguez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/\"},\"author\":{\"name\":\"Santiago Porras Rodr\u00edguez\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c84cf613b7c5b8d5e1f7625a3e4c8c27\"},\"headline\":\"Azure WebJobs | Actualizando datos en background\",\"datePublished\":\"2015-05-14T10:58:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/\"},\"wordCount\":730,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2015\\\/04\\\/webjobs-poster.jpg\",\"keywords\":[\"Azure\",\"Azure WebApps\",\"Azure WebJobs\",\"Azure WebSites\"],\"articleSection\":[\"Azure App Services\",\"Azure Web Sites\",\"Azure WebJobs\",\"Azure WebSites\",\"Microsoft Azure\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/\",\"name\":\"Azure WebJobs para actualizar datos en background\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2015\\\/04\\\/webjobs-poster.jpg\",\"datePublished\":\"2015-05-14T10:58:37+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c84cf613b7c5b8d5e1f7625a3e4c8c27\"},\"description\":\"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/azure-webjobs-actualizando-datos-en-background\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2015\\\/04\\\/webjobs-poster.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2015\\\/04\\\/webjobs-poster.jpg\",\"width\":650,\"height\":300},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/c84cf613b7c5b8d5e1f7625a3e4c8c27\",\"name\":\"Santiago Porras Rodr\u00edguez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g\",\"caption\":\"Santiago Porras Rodr\u00edguez\"},\"description\":\"Innovation Team Leader at ENCAMINA | MVP in Developer Technologies. Apasionado por las nuevas tecnolog\u00edas. Colaboro con la comunidad de desarrolladores escribiendo art\u00edculos en mi blog personal y ocasionalmente en CompartiMOSS.com. Adem\u00e1s, soy uno de los coordinadores de TenerifeDev, grupo de usuarios de .NET de Tenerife y de otros grupos como Comunidad Office 365. Puedes encontrarme en la red microparticipando en Twitter con el usuario @saintwukong\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/saintwukong\"],\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/en-tu-casa-o-en-la-mia\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Azure WebJobs para actualizar datos en background","description":"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/","og_locale":"es_ES","og_type":"article","og_title":"Azure WebJobs | Actualizando datos en background","og_description":"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site","og_url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2015-05-14T10:58:37+00:00","og_image":[{"width":650,"height":300,"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg","type":"image\/jpeg"}],"author":"Santiago Porras Rodr\u00edguez","twitter_card":"summary_large_image","twitter_creator":"@saintwukong","twitter_misc":{"Escrito por":"Santiago Porras Rodr\u00edguez","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/"},"author":{"name":"Santiago Porras Rodr\u00edguez","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c84cf613b7c5b8d5e1f7625a3e4c8c27"},"headline":"Azure WebJobs | Actualizando datos en background","datePublished":"2015-05-14T10:58:37+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/"},"wordCount":730,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg","keywords":["Azure","Azure WebApps","Azure WebJobs","Azure WebSites"],"articleSection":["Azure App Services","Azure Web Sites","Azure WebJobs","Azure WebSites","Microsoft Azure"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/","url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/","name":"Azure WebJobs para actualizar datos en background","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg","datePublished":"2015-05-14T10:58:37+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c84cf613b7c5b8d5e1f7625a3e4c8c27"},"description":"Ejemplo de uso de Azure WebJobs para actualizar en background los datos almacenados en Azure Table Storage que ser\u00e1n mostrados en un Web Site","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/azure-webjobs-actualizando-datos-en-background\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2015\/04\/webjobs-poster.jpg","width":650,"height":300},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/c84cf613b7c5b8d5e1f7625a3e4c8c27","name":"Santiago Porras Rodr\u00edguez","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/626d42f63b21b55341f07a1a63002469e3b64521b19c99273621705f28165d74?s=96&d=mm&r=g","caption":"Santiago Porras Rodr\u00edguez"},"description":"Innovation Team Leader at ENCAMINA | MVP in Developer Technologies. Apasionado por las nuevas tecnolog\u00edas. Colaboro con la comunidad de desarrolladores escribiendo art\u00edculos en mi blog personal y ocasionalmente en CompartiMOSS.com. Adem\u00e1s, soy uno de los coordinadores de TenerifeDev, grupo de usuarios de .NET de Tenerife y de otros grupos como Comunidad Office 365. Puedes encontrarme en la red microparticipando en Twitter con el usuario @saintwukong","sameAs":["https:\/\/x.com\/saintwukong"],"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/en-tu-casa-o-en-la-mia\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/79"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}