Windows Azure Mobile Services vs WCF Rest Services

Les dejo el video y el material del diplomado de Windows Azure https://www.facebook.com/groups/cloudism/?fref=ts

Aquí se pueden descargar el ejemplo de WCF utilizado en el video.

Para poder ejecutar el ejemplo se debe configurar la base de datos en el web.config.

<add name="lagashmobile_dbConnectionString" connectionString=""
      providerName="System.Data.SqlClient" />

 

Nueva funcionalidad API para Windows Azure Mobile Services

Esta semana se ha publicado nueva funcionalidad para Mobile Services. Anteriormente Mobile Service tenía dos opciones para ejecutar scripts:

  1. Asociados a datos. En la cual se define un modelo para los mismos y asociamos scripts para la inserción, actualización, eliminación y lectura.
  2. Tareas (Jobs). Nos permitía definir scripts que se ejecuten cada cierto periodo de tiempo o bien en demanda. Pero estos no admitían ser invocados mediante una dirección del servicio REST.

Actualmente se dispone de una tercera opción. Disponible desde este semana, denominada API. La cual nos permite definir, para los distintos verbos de HTTP un script para posteriormente ejecutarlo mediante la invocación de una dirección REST.

Anteriormente, si queríamos lograr este efecto, no teníamos otra alternativa que realizarlo en la sección de datos, aunque desde el punto de vista del diseño no era algo que esté bien modelado. Esta opción nos permite definir acciones con mayor elegancia y de una forma más correcta, teniendo una alternativa de servicios móviles completa y funcional.

Esto soluciona el problema mencionado en un post anterior.

Modificando el ejemplo anterior de Push notifications a Windows 8 podemos realizar las siguientes actividades:

  1. Ir a Windows Azure y seleccionar nuestro servicio de Mobile Services.
  2. Seleccionar el tab de API

image

 

3. En la barra inferior seleccionar la opción Crear.

4. Especificar un nombre para esa funcionalidad y especificar los permisos asociados para las operaciones GET, POST, PUT, PATCH, DELETE. Podemos modificar posteriormente los permisos asociados a estas operaciones.

image

5. Podemos modificar el script del post anteriormente referenciado para que funcione mediante el uso de API y permita su ejecución desde un servicio REST.

image

6. En este caso, estamos especificando que el script se ejecute como respuesta a una operación GET. Si quisiéramos que fuera mediante un POST podemos modificarlo indicando “exports.post” y de esta forma indicar el script para cada uno de los verbos.

7. En el tab de permisos podemos editar los valores para cada una de las operaciones.

8. Por último, la dirección que tendrá nuestra acción es https://{account}.azure-mobile.net/api/{accion} para mi caso puntual sería.

https://lagashmobile.azure-mobile.net/api/pruebaspush

9. Con esta nueva funcionalidad de API, ahora si, podemos invocar la acción programáticamente utilizando el siguiente código:

image 

Esta funcionalidad nos permite utilizar la facilidad de las librerías de Mobile Services para implementar Push Notifications hacia Windows 8, Windows Phone, iOS y Andriod, desde cualquiera de nuestras aplicaciones o sitios web.

Aplicación de ejemplo de Push Notifications a Windows 8 usando Windows Azure Mobile Services

Aquí les dejo la aplicación de ejemplo del post de push notifications a Windows 8.

Primero deberá descargar el código de ejemplo.

El archivo comprimido contiene:

  • Aplicación de Windows 8 que debe ser registrada en la tienda y recibe las notificaciones.
  • Archivo notifications.sql que crea la tabla utilizada en el servicio de Mobile Services.
  • Archivo push.js que contiene el script que debemos crear como job en el servicio de Mobile Services.

 

Para poder ejecutar el código debemos realizar los siguientes pasos:

1. Registrar la aplicación de Windows 8 en el store para la recepción de notificaciones.

  • Ve a la página Desarrollo de aplicaciones de la Tienda Windows del Centro de desarrollo de Windows e inicia sesión con tu cuenta Microsoft.
  • Una vez que hayas iniciado sesión, selecciona la pestaña Panel.
  • Selecciona Submit a new app.Ubicación de la opción de envío de una nueva aplicación

  • Selecciona Name para proporcionarle un nombre único a la aplicación. Ten en cuenta que no puedes continuar si no realizas este paso primero. Escribe el nombre y haz clic en el botón Reservar nombre

La página de envío de una aplicación

 

Cuando reservaste un nombre para la aplicación, la Tienda Windows creó las credenciales asociadas. También asignó valores de identidad que deben estar presentes en el archivo del manifiesto de la aplicación (package.appxmanifest): nombre y editor. Si ya has cargado la aplicación en la Tienda Windows, estos valores se habrán agregado automáticamente al manifiesto. Si no has cargado la aplicación, tendrás que agregar los valores de identidad al manifiesto manualmente.

  • Selecciona Advance features.

 

Ubicación de la opción de características avanzadas

 

  • En la página "Características avanzadas", selecciona Información sobre los servicios Live Connect y notificaciones de inserción, que se muestra aquí.

Ubicación de la opción de los servicios Live Connect y las notificaciones de inserción

 

  • En la página "Push Notifications and Live Connect services info", selecciona Indentify your app.

 

Ubicación de la opción de identificación de la aplicación

 

  • Sigue las instrucciones proporcionadas en la página “Identifying your app” para establecer los valores de identidad en el manifiesto de la aplicación, ya sea manualmente o mediante Microsoft Visual Studio Express 2012 for Windows 8.
  • Desde la página "Identifying your app", selecciona “Autenticating your service”

 

Ubicación de la opción de autenticación del servicio

 

  • Guarda los valores de SID y Client Secret. Estos valores serán necesarios para posteriormente configurarlos en el servicio de Mobile Services.

 

2. Si no tienes un Mobile Service que quieras utilizar para este ejemplo, crea uno nuevo en Windows Azure.

  • Ir a www.azure.com y autenticarse.
  • En la barra inferior seleccionar “+ Nuevo” => “Proceso” => “Servicio Mobil” => “Crear”

 

image

  • Especificar un nombre para el servicio y seleccionar o crear una base de datos.

 

image

3. Configura las credenciales obtenidas en el paso (1) en la cuenta de Mobile Services.

  • Entrar al Mobile Service recientemente creado ó el que queramos utilizar.
  • Ir la parte de “Insersión” ó “Push” configurar los valores obtenidos en el paso (1)

 

image

4. Configura la aplicación para que acceda al Mobile Service que desees.

  • Configurar la URL del servicio. Para esto podemos solamente cambiar el valor de {account-mobile-services} por el nombre que tenga nuestro servicio.
  • Obtener la clave de la aplicación de la opción “Administrar Claves” de la barra interior.

 

image

 

image

 

5. Ejecutar el script en la base de datos que utiliza el Mobile Services.

6. Crear un job que se ejecute en demanda con el código del archivo push.js

Envío de notificaciones a Windows 8 utilizando Windows Azure Mobile Services

 

Las aplicaciones de Style Windows 8 permiten recibir notificaciones (Push Notifications) al igual que otras tecnologías para dispositivos móviles. No entraremos en detalles de como se registra una aplicación de Win 8 para la recepción de  notificaciones, dado que ya hay varia información al respecto aunque muy poca en español, sino mostrar como utilizar Mobile Services de Windows Azure para administrar los servicios y realizar el envío de dichas notificaciones. Para comenzar daremos entonces una breve introducción que permita mostrar como implementar la recepción de las notificaciones en Windows 8. Si ya conocen este proceso pueden saltar esta primera etapa.

Registración de App Win 8 en Windows Store Developer.

En el siguiente link puede encontrar información de como se realiza la registración.

Una vez que la aplicación ya está registrada en el store de Microsoft debemos dirigirnos al sitio de Windows Azure e identificar la aplicación en el servicio mobile que deseemos que envía las notificaciones.

image

Una vez configurados estos valores, la aplicación de Mobile Services ya se encuentra apta para realizar el push de notificaciones a Windows 8.

Al mismo tiempo debemos asociar la solución que estamos desarrollando en Windows 8 con la aplicación que registramos en la tienda. Para esto debemos realizar los siguientes pasos:

registrar app win8 1

registrar app win8 2 

registrar app win8 3

registrar app win8 4

 

 

Algo que debemos notar es que cada uno de las instancias de la App que se encuentren ejecutándose en distintos dispositivos estará identificado por una URI diferente. Esta URI es la que nos permitirá identificar al dispositivo y poder enviarle notificaciones. Si no conocemos esta URI no será posible enviarle una notificación a esa instancia.

La aplicación de Windows 8 que recibirá las notificaciones y acabamos de asociar a la registración en el store deberá implementar el siguiente código:

El primer paso es abrir el canal, y registrar la aplicación para obtener la URI que identifica la instancia. En el archivo App.xaml.cs agregar:

 

registrar app win8 5 

Luego, definir el evento que recibirá la notificación:

Observar que en la imagen anterior se registra el siguiente evento para recibir y procesar cada una de las notificaciones. Este método deberá ser reemplazado por la lógica de que deseemos implementar.

 

image 

Para finalizar debemos invocar al OpenChannel al momento de iniciar la aplicación:

 

image

 

La recepción de algunos tipos de notificaciones requieren cambios en el manifiesto:

 

image

 

Una vez realizados estos pasos, ya tenemos creada y registrada nuestra App de Win 8 lista para recibir notificaciones y hemos asociado las credenciales de esta aplicación en nuestro Mobile Service.

Para poder realizar el envío de la notificación, a parte de conocer las credenciales ya registradas, debemos conocer la URI de la instancia a la cual deseamos hacerle el Push. En caso de que la notificación sea general para todas las instancias, debemos enviarla a cada una de ellas.

Para esto definiremos una tabla donde podamos almacenar la URI de cada una de las instancias:

Para este ejemplo no modificaremos ningún script ni especificaremos permisos particulares para las operaciones.

 

image

 

Por último para poder realizar el Push desde Mobile Services crearemos un Job. En este caso será uno que se ejecutará en demanda y no estará programado para que se ejecute en ninguna frecuencia en particular. Ustedes deberá implementar esta lógica para que se encuentre asociada al evento que requiera en función del caso de negocio que desee realizar.

 

envio de notificaciones

 

  1. Obtenemos la tabla “Notifications” donde se encuentran las URIs de cada instancia.
  2. Procesamos cada uno de los registros de la tabla (en este caso estaremos haciendo un push a todas las instancias).
  3. Utilizamos la librería de push para hacerle un envío a Windows 8 de un mensaje del tipo Badge (Ver información al final del post para implementar push a Windows Phone, iOS, Andriod).

 

Por último, para poder probar el job, debemos publicar la URI de la instancia que recibirá la notificación.

Si ya estamos ansiosos por probar esto, podemos simplemente ejecutar la aplicación de Windows 8, colocar un breackpoint al obtener la URI e insertarla manualmente en la tabla para poder ejecutar el Job.

image

 

Una vez que ya verificamos que hemos realizado todos los pasos correctamente, y que la notificación es recibida por la aplicación, debemos registrar automáticamente la URI utilizando el servicio de Mobile Services y la tabla Notifications.

Para esto debemos realizar los siguientes pasos:

Agregar la referencia de Mobile Services a la App, Json.Net y Microsoft.Threading

 

image

 

image 

image

image

Abrir el archivo App.xaml.cs y agregar las credenciales del Mobile Services.

 

image

Reemplazar {account} y {app-key} por los datos de su cuenta.

Definir la clase de Notifications que utilizaremos para el servicio:

image

Por último, al recibir la URI debemos agregarla utilizando Mobile Services. Para esto modificaremos el siguiente método: OnChannelCreationCompleted.

 

image

 

 URIs de Push Notifications:

Una URI tiene un tiempo de vigencia hasta que la misma se encuentra vencida. En el script de Mobile Service deberíamos identificar que la URI que estamos registrando no se encuentra registrada previamente. Y por último, en el envío del Push notification debemos identificar si el servicio de notificaciones de Windows 8 nos devuelve como error que esa URI ya se encuentra vencida para quitarla de la tabla.

 

Limitación de los jobs.

Una de las limitaciones que tienen los jobs es que no podemos invocarlos en forma programática en demanda. Por lo cual, no podemos ejecutar este job a raíz de evento generado por algún otro sistema o en algún momento en particular. Debemos analizar si el push se encuentra asociado a alguna operación de datos, para colocarlo donde se produzca la misma, o bien tener una tabla de notificaciones por enviar y cada cierto tiempo procesar los items pendientes.

Otra de las posibilidades es generar un job que se ejecute cada cierto tiempo y al mismo tiempo monitorear una cola (Queue de Service Bus o Storage) para desencolar los items que debemos procesar.

Por el momento si quisiéramos ejecutarlo a mediante servicio rest (utilizando Mobile Services) en demanda, podemos crear una tabla (por ejemplo Push), solo para que nos permita definir un script en alguna de las operaciones y ejecutar el código de la imagen anterior. Esto genera un problema de diseño porque en realidad estamos operando con una acción que hace referencia a un modelo de datos, cuando en realidad solo la estamos utilizando para hacer uso del script ejecutándolo en demanda a través del servicio.

 

Referencia de Request y Response para notificaciones en Windows 8:

http://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx

 

Librería de Push de Mobile Services:

http://msdn.microsoft.com/en-us/library/windowsazure/jj554217.aspx

 

Método Descripción
apns Envío de notificaciones a iOS. (IPhone)
gcm Envío de notificaciones a Andriod.
mpns Envío de notificaciones a Windows Phone 8
wns Envío de notificaciones a Windows Store Apps (Windows 8)

Encriptar datos en Windows Azure Mobile Services

 

Un aspecto importante de los sistemas es mantener la información sensible de forma segura. Para lo cual uno de los principales puntos es poder encriptar la información en nuestras bases de datos.

Una de las restricciones que encontramos en SQL Database (SQL Azure) es la posibilidad de utilizar encriptación en la base de datos. Este es un mecanismo que debemos implementar desde la lógica de la aplicación. En la mayoría de los casos es un proceso bastante simple o bien podemos encontrar muchas formas y mecanismos para implementarlo desde un sitio web con distintos lenguajes. En este caso Windows Azure Mobile Services utiliza node.js para la programación de los scripts de acciones del servicio.

Veremos que alternativas tenemos para encriptar la información utilizando esta tecnología.

Como punto inicial para conocer un poco más sobre Node.js podemos dirigirnos a: http://nodejs.org/

Para probar este mecanismo podemos instalar Node.Js localmente y realizar las siguientes pruebas. En el link anterior van a poder descargar el instalador.

image

En esta ocasiones vamos a utilizar la librería Crypto de Node.Js.

Como primer paso vamos a identificar cuales son los algoritmos que soporta esta librería tanto para cifrar como para realizar un hash.

Para esto podemos ejecutar la siguiente prueba:

image

Como resultado obtendremos lo siguiente:

Algoritmos de Cifrado

Algoritmos de Hash

CAST-cbc
aes-128-cbc
aes-128-cfb
aes-128-cfb1
aes-128-cfb8
aes-128-ctr
aes-128-ecb
aes-128-gcm
aes-128-ofb
aes-128-xts
aes-192-cbc
aes-192-cfb
aes-192-cfb1
aes-192-cfb8
aes-192-ctr
aes-192-ecb
aes-192-gcm
aes-192-ofb
aes-256-cbc
aes-256-cfb
aes-256-cfb1
aes-256-cfb8
aes-256-ctr
aes-256-ecb
aes-256-gcm
aes-256-ofb
aes-256-xts
aes128
aes192
aes256
bf
bf-cbc
bf-cfb
bf-ecb
bf-ofb
blowfish
camellia-128-cbc
camellia-128-cfb
camellia-128-cfb1
camellia-128-cfb8
camellia-128-ecb
camellia-128-ofb
camellia-192-cbc
camellia-192-cfb
camellia-192-cfb1
camellia-192-cfb8
camellia-192-ecb
camellia-192-ofb
camellia-256-cbc
camellia-256-cfb
camellia-256-cfb1
camellia-256-cfb8
camellia-256-ecb
camellia-256-ofb

camellia128
camellia192
camellia256
cast
cast-cbc
cast5-cbc
cast5-cfb
cast5-ecb
cast5-ofb
des
des-cbc
des-cfb
des-cfb1
des-cfb8
des-ecb
des-ede
des-ede-cbc
des-ede-cfb
des-ede-ofb
des-ede3
des-ede3-cbc
des-ede3-cfb
des-ede3-cfb1
des-ede3-cfb8
des-ede3-ofb
des-ofb
des3
desx
desx-cbc
id-aes128-GCM
id-aes192-GCM
id-aes256-GCM
idea
idea-cbc
idea-cfb
idea-ecb
idea-ofb
rc2
rc2-40-cbc
rc2-64-cbc
rc2-cbc
rc2-cfb
rc2-ecb
rc2-ofb
rc4
rc4-40
rc4-hmac-md5
seed
seed-cbc
seed-cfb
seed-ecb
seed-ofb

DSA-SHA1-old
dsa
dsa-sha
dsa-sha1
dsaEncryption
dsaWithSHA
dsaWithSHA1
dss1
ecdsa-with-SHA1
md4
md4WithRSAEncryption
md5
md5WithRSAEncryption
mdc2
mdc2WithRSA
ripemd
ripemd160
ripemd160WithRSA
rmd160
rsa-md4
rsa-md5
rsa-mdc2
rsa-ripemd160
rsa-sha
rsa-sha1
rsa-sha1-2
rsa-sha224
rsa-sha256
rsa-sha384
rsa-sha512
sha
sha1
sha1WithRSAEncryption
sha224
sha224WithRSAEncryption
sha256
sha256WithRSAEncryption
sha384
sha384WithRSAEncryption
sha512
sha512WithRSAEncryption
shaWithRSAEncryption
ssl2-md5
ssl3-md5
ssl3-sha1
whirlpool

Podemos implementar un algoritmo de encriptación de forma muy sencilla implementando las siguientes líneas de código:

image

Para desencriptar podemos utilizar las siguientes líneas de código:

image

Con este simple mecanismo y unas pocas líneas de código ya podemos encriptar la información dentro de nuestros Mobile Services. Por supuesto que este algoritmo es muy simple y hay otros mecanismos más seguros.

En caso de que se desee realizar un hash podríamos realizar los siguientes cambios al código.

image

Espero que les pueda servir para utilizarlo en sus servicios de Windows Azure Mobile Services.