domingo, 27 de noviembre de 2016

Offline Sync + Azure Mobile App + Internal Server Error

Hace poco tiempo decidí aprender Xamarin Forms. Tuve suerte ya que Microsoft lanzó el curso en línea "Xamarin Diplomado Latinoamérica",

Si están pensando en aprender dicha tecnología, no se lo pierdan: Xamarin Diplomado Latinoamerica.

La cuestión con todo esto es que en dicho curso se debe hacer una app conectada a Azure Mobile Services.

La app que hice muestra en pantalla las cotizaciones de las principales monedas con las que se opera en Uruguay (mi país de origen).

Para ello se fija en la base local (IMobileServiceSyncTable<Cotizaciones>) si no existen registros para la fecha actual, si no existen: baja de la página del Banco República Oriental del Uruguay las cotizaciones del día, las guarda en la base local y luego de ello sincroniza con Azure. La idea es, más adelante, completar esta app agregando la funcionalidad de que el usuario pueda consultar por fecha las cotizaciones y además un gráfico con la evolución de las monedas entre dos fechas. 

(No, no vale reírse ... es una app con objetivo didáctico! 😃 )



Al intentar sincronizar la app, en el método PullAsync,  tiraba un error 500: "Internal Server Error".

El código del lado del cliente (Xamarin Forms):




Ésta es la clase “Cotizaciones” definida en el cliente:



El código correspondiente al Push funcionó, ya que si abría la tabla en el SQL Management Studio se mostraban los datos!: 



Ésta es la clase “CotizacionesController” definida en el Backend. Noten el decorado de la clase: "   [MobileAppController]" ... sin él las cosas no funcionan del todo bien.


Ésta es la clase “Cotizaciones” definida en el  Backend: 


El motivo de este post, es explicarles (mas allá del error puntual que yo tenia (Tenía desactivado el   AutomaticMigrationsEnabled  de Entity Framework Code First automatic migrations), cómo hice para solucionar el problema:

Una opción puede ser: En la parte del servicio en Azure… entré a una parte que se llama “Service Editor” y luego Output. Esta ventana nos muestra un traceo con todos los posibles errores que hayan ocurrido en el servicio:



Otra opción que también me fue de utilidad, es "attachearnos" (adjuntarnos) al backend (lo puedes hacer desde la pestaña Cloud Explorer)  y depurar cuando el servicio recibe una llamada. Quedé asombrado de las buenas herramientas que posee Visual Studio (con el SDK de Azure instalado) para realizar cualquier operación en la nube:




Bueno, eso ha sido todo por ahora espero les sea de utilidad... hasta la próxima!