Introducción a Web Services con .NET III
En las partes uno y dosde nuestros tutoriales vimos como podemos crear un Web Service con .NET, desplegarlo en Flex y posteriormente mediante nuestro Web Service acceder a una base de datos SQL2005. Aunque en el tutorial pasado tenemos una excelente manera de desplegar los datos no es la manera o el camino más adecuado para representar o traer nuestros datos, ya que si son demasiados datos podemos bajar el rendimiento y tiempo de respuesta de nuestra aplicación tanto del lado del cliente como del servidor. En esta última parte de la saga veremos como podemos manejar esta situación además de desplegar resultados y posibles fallas con eventosResultEvent y FaultEvent, además implementaremos un J2EE design pattern llamado DataTransfer Object (Value Object) que me permite un mayor performance en la aplicación en ambos lados, cliente y servidor.
Data Transfer Object (Value Object)
El patron Data Transfer Object tambien conocido como Value Object (VO) es un patrón que me permite optimizar la transferencia de datos atraves de las capas de la aplicación. Este patrón es muy efectivo ya que en lugar de mandar o recibir datos de manera individual, contiene todos los datos en una estructura única (estructura de datos) solicitada ya sea por la petición o la respuesta. Para ver más información acerca de este patrón pueden ir al sitio de Sun o pulsando aqui.. También Xavi escribio un articulo acerca de CAIRNGORM explicando este patrón y lo puedes ver pulsando aqui.
Lo primero que debemos hacer entonces es regresar a nuestro código (.NET) y escribir la siguiente estructura de datos en Service.cs. Tenemos entonces ahora implementando el patron VO, veamos pues el código
Posteriormente vamos a cambiar ahora el método que teniamos anteriormente, es decir el metódo getDataTable (tutorial pasado) por un método llamado obtenProductos para regresar un arreglo de objetos e inerpretarlo directamente en Flex como un ArrayCollection, en este caso de productos, entonces en las lineas n y n dentro del bloque try declaro un Reader que me
leera los datos de mi consulta. Enseguida declaro un ArrayList, no se olviden importar la clase System.Collections para tal efecto , y este ArrayList es el que me almacenara los datos que vaya leyendo el DataReader uno por uno. Con el método Read, del DataReader ire leyendo todos y cada uno de los registros que tengo disponibles, recuerden que para consultas de solo lectura usemos DataReader y no Dataset ya que el DataReader es mucho más rápido que el DataSet.
Ahora en las lineas n y n creo un nuevo objeto por cada uno de los datos o registros que encuentre mi datareader y asigno las propiedades que ya defini en mi estructura de datos. Estas propiedades seran igual al valor obtenido por el DataReader y si se dan cuenta van de manera secuencial es decir de 0 a 6 y lo más importante de todo que que el dr tiene tipos de datos para obtener, lo cual esto es caso sensible ya que si se que en mi tabla de la base de datos tengo un tipo de dato Int y quiero obtener un dr.GetString (n) me mandara un error el compilador. Para esto también es importante definir el tipo de datos correcto en mi estructura de datos si no me puede ocasionar problemas posteriores. Ahora una vez que ya tengo cada uno de los registros en un objeto , voy agregando esos objetos a mi ArrayList, es importante recalcar que hasta este punto no estamos regresando nuestros VOs o Value Objects.
Ahora nuestra intención es regresar los VOs entonces en la línea n declaro un tipo de Dato Product (estructura de datos que ya definimos) y que sera un array y le asigno un nombre de variable que sera igual al mismo pero con una dimensión preestablecida y que es igual a la dimensión de el ArrayList que ya llene con mis registros. Es entonces el momento de regresar mi estructura de datos dentro de un ciclo for y diciendole que cada elemento i de productFlex sera igual a un tipo de dato Product (elemento i del arreglo). Si notamos tenemos un parentesis, esto esta haciendo una conversion de datos del ArrayList a Product, de esta manera ya podemos regresar nuestras estructuras de datos y Flex las interpretara como un ArrayList!.
Finalmente en la línea n regreso mi estructura de Datos y Listo.
Manejo de Resultados (ResultEvent) y Errores (FaultEvent)
En todas las aplicaciónes al dia de hoy es necesario además de desplegar los resultados de manera eficiente, tambien manejar las posibles fallas que se nos pueden presentar a lo largo de la aplicación. Algunas de las fallas pueden ser que el servidor no este disponible, que el nombre del método que tengo del lado de mi WebService no corresponde al que estoy asignando en flex y esto es muy común osea que mucho cuidado, o algun otro tipo de error. Entonces siempre que trabajemos con WebServices u Objetos Remotos por que esto tambien aplica a objetos Remotos es manejar eventos de Tipo ResultEvent y FaulEvent uno para los resultados y otro para posibles fallas. Como recomendación entonces siempre manejaremos ResultEvent y FaultEvent, ya sea para WebServices o Para Objetos Remotos.
En Flex entonces modificaremos el código de la siguiente manera:
En mi etiqueta operation que se encuentra en la línea n tengo un atributo llamado name que es igual al nombre del método que tengo de manera remota, es decir en .NET , esto hay que tener mucho cuidado para no tener posibles errores. Los siguientes dos atributos son result que es igual a una función y que esa funcion se encargara de llenar un ArrayCollection con los resultados para el DataGrid ya que declaramos este ArrayCollection con el Metatag [Bindable]. Posteriormente tengo otro atributo llamado fault que es igual a una función que en caso de cualquier falla, me dira en una ventana de Alerta, la posible falla en la que estoy incurriendo.
Puedo tener más etiquetas operation es decir más operaciones para efectuar , además es muy conveniente y comodo manejar por cada etiqueta operation sus resultados es decir escribir las funciones pertinentes para manejar los resultados y podemos tener de alguna manera solo un faulEvent es decir uno genérico o podriamos implementar uno por cada operacion.
Esta es la manera más apropiada de trabajar con WebServices y .NET, ya que me va a ofrecer un rendimiento mucho mejor del lado del cliente y servidor. No obstante implica más código pero es la mejor manera de hacerlo. A los WebServices podemos mandarles también parámetros para una mayor interacción con el servicio Remoto y que estos esperen el parámetro o parametros para efectuar las operaciones solicitadas con este parametro. En la próximo tutorial veremos como puedo accesar directamente a un objeto Remoto es decir a una dll hecha en .NET atraves de WEBORB
Acerca de esta entrada
Usted está leyendo “Introducción a Web Services con .NET III,” una entrada de MadeInFlex
- Autor: Israel Gaytan
Israel Gaytán es un Adobe Certified Professional y desarrollador enfocado en la creación de RIAs. Desarrolla bajo la plataforma.NET y ha trabajado con Flash, Flash remoting (AMFPHP, .NET) y Flash Media Server.
- URL del Autor:
- http://riata.wordpress.com
- Publicada:
- 21.02.07 / 7pm
- Categorías:
- Casos de uso, Tutoriales, .NET
- Entradas relacionadas:
- LiveCycle Data Services 2.5.1
- Disponible Adobe LiveCycle Data Services 2.5
- Granite Data Services
- Cairngorm 2.2
- Número de visitas:
- 4523


23 Comentarios
Ir al formulario de comentarios | rss (comentarios) [?] | trackback url [?]