180 likes | 353 Views
Ejemplo práctico: Aplicación tipo Web 2.0 { “lugares visitados” }. Alejandro Mezcua MVP Device Application Development alejandro.mezcua@byteabyte.net http://www.byteabyte.net/. Objetivos. Mostrar el uso de servicios Web WCF en .NET Compact Framework 3.5
E N D
Ejemplo práctico: Aplicación tipo Web 2.0 {“lugares visitados”} Alejandro Mezcua MVP Device Application Development alejandro.mezcua@byteabyte.net http://www.byteabyte.net/
Objetivos • Mostrar el uso de servicios Web WCF en .NET Compact Framework 3.5 • Ver un ejemplo de integración de una solución completa (móvil – Web)
{en vivo } demo
Pasos de construcción Servicio WCF "FotoUploader" (I) • Servicio creado en una aplicación Web ASP.NET • Binding básico • Único utilizable desde .NET CF • <endpoint • address="" • binding="basicHttpBinding" • bindingConfiguration="fotoUploaderConfig” • contract="LugaresVisitadosWebSite.IFotoUploader"> • …
Pasos de construcción Servicio WCF "FotoUploader" (II) • Ampliado el límite de elementos aceptables para un parámetro de tipo array • Por omisión 32k • Una imagen es un byte[] <bindings> <basicHttpBinding> <bindingname="fotoUploaderConfig"> readerQuotasmaxArrayLength="131072" /> </binding> </basicHttpBinding> </bindings>
Pasos de construcción Servicio WCF "FotoUploader" (III) • Servicio alojado en IIS • Guarda fotos y metadatos (posición) en App_Data • No accesible con Server.MapPath • El contexto habitual de IIS no está accesible en WCF por omisión string fotoLocalPath = String.Format("{0}\\{1}\\{2}", HostingEnvironment.ApplicationPhysicalPath, "App_Data", fotoFileName);
{FotoUploaderSvc} demo
Pasos de construcción Cliente .NET CF (I) • Aplicación Windows Forms .NET CF 3.5 • Creación del proxy usando NetCFSvcUtil.exe • Instalado con los “Power Toys for .NET CF 3.5” (no viene con Visual Studio de serie) • C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin> • Netcfsvcutil.exe /language:cs http://[servicio].svc
Pasos de construcción Cliente .NET CF (II) • Incluir los archivos generados en el proyecto • CFClientBase.cs, FotoUploader.cs • Usar el proxy para invocar al servicio web • FotoUploaderClient uploader = new FotoUploaderClient( • FotoUploaderClient.CreateDefaultBinding(), • new System.ServiceModel.EndpointAddress([UrlServicio])); • if (!uploader.UploadFoto(fileByteBuffer, latitud, longitud, notas)) • …
Pasos de construcción Aplicación Web (I) • Permite mostrar las fotos en tamaño completo o reducido • Al estar en App_Data no son accesibles directamente, se usa un HttpHandler • http://[server]/[dir]/fotoHandler.ashx?fileName=[fileInApp_Data]&width=[imageWidth]
Pasos de construcción Aplicación Web (II) • Las fotos en el mapa se muestran desde JavaScript • Se usa un servicio WCF que expone los datos en formato de JSON (fotosCoordenadas.svc) • <endpointBehaviors> • <behaviorname="jsonBehavior" > • <enableWebScript/> • </behavior> • </endpointBehaviors> • … • <endpointaddress=““ binding="webHttpBinding“ • contract="LugaresVisitadosWebSite.IFotosCoordenadas" • behaviorConfiguration="jsonBehavior"> • …
Pasos de construcción Aplicación Web (III) • Desde ASP.NET AJAX se accede al servicio mediante una referencia • Desde JavaScript se usa como un objeto JavaScript • <asp:ScriptManagerID="ScriptManager" runat="server"> • <Services> • <asp:ServiceReference Path="~/fotosCoordenadas.svc" /> • </Services> • </asp:ScriptManager> functionmapReady() { var ws = new byteabyte.net.samples.IFotosCoordenadas(); ws.GetFotos(getGetFotosComplete); }
Pasos de construcción Aplicación Web (IV) • El nombre a usar en JavaScript lo debe dar intellisense, si no, acceder al servicio y ver qué devuelve • La llamada es asíncrona, en la respuesta se tienen objetos (según se exporten en el servicio) • http://localhost/lugaresvisitados/fotoscoordenadas.svc/js functiongetGetFotosComplete(result) { … for(var i = 0; i < result.length; i++) { var ve = new VELatLong(result[i].Latitud, result[i].Longitud); … }
{La aplicacion Web } demo
{¿Preguntas?} Gracias Alejandro Mezcua MVP Device Application Development http://www.byteabyte.net/ alejandro.mezcua@byteabyte.net