Alejandro Mezcua MVP Device Application Development
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 }
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"> …
Ampliado el límite de elementos aceptables para un parámetro de tipo array Por omisión 32k Una imagen es un byte[] readerQuotas maxArrayLength="131072" />
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}
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
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)) …
{ LugaresVisitadosWMClient }
Permite mostrar las fotos en tamaño completo o reducido Al estar en App_Data no son accesibles directamente, se usa un HttpHandler
Las fotos en el mapa se muestran desde JavaScript Se usa un servicio WCF que expone los datos en formato de JSON (fotosCoordenadas.svc) … <endpoint address= binding="webHttpBinding contract="LugaresVisitadosWebSite.IFotosCoordenadas" behaviorConfiguration="jsonBehavior"> …
Desde ASP.NET AJAX se accede al servicio mediante una referencia Desde JavaScript se usa como un objeto JavaScript function mapReady() { var ws = new byteabyte.net.samples.IFotosCoordenadas(); ws.GetFotos(getGetFotosComplete); }
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) function getGetFotosComplete(result) { … for(var i = 0; i < result.length; i++) { var ve = new VELatLong(result[i].Latitud, result[i].Longitud); … }
{ La aplicacion Web }
{ ¿Preguntas? } Alejandro Mezcua MVP Device Application Development