ADO.NET Data Services ( III ). Cómo consumir un servicio desde una aplicación WinForm

En los post anteriores ya hemos visto cómo puede crearse un servicio de ADO.NET Data Services y cómo se puede interactuar con él desde el navegador.

Ahora es el turno de ver cómo se puede consumir el servicio desde una aplicación cliente, que como ya hemos comentado, podría ser cualquier tipo de aplicación..En este caso, el ejemplo lo haremos con una aplicación Windows.

  • Lo primero que haremos es crear una aplicación WinForm.
  • Añadir una referencia a Microsoft.Data.WebClient.
    • %ProgramFiles%Reference AssembliesMicrosoftFrameworkASP.NET 3.5 Extensions

image

  • Para poder acceder al servicio necesitamos crear una capa de objetos que nos posibiliten llamar de forma sencilla al servicio que exponemos, es decir, el proxy. Hasta la versión Release esta opción no está integrada y es necesario generarlo desde la línea de comandos.

    1. El proceso que debemos usar se llama WebDataGen.exe y se encuentra en WebDataGen.exe en %Program Files%Microsoft ASP.NET 3.5 Extensions.
    2. WebDataGen.exe /mode:ClientClassGeneration /outobjectlayer:Northwind.cs /uri:h http://localhost:3895/NorthwindService.svc
    3. Este proceso genera un fichero cs que tenemos que incluir en el proyecto WinForm.

  • Una vez incluido en el proyecto, ya tenemos todo lo necesario.
  • Lo que haremos es llamar al servicio de ADO.NET Data Services para que nos devuelva la información de todos los clientes y mostraremos la información en un grid.
  • Arrastraremos un DataGridView al formulario.
  • Creamos un clase nueva, que le llamamos NorthwindService.cs.
    • En este clase es dónde creamos los métodos que acceden al servicio ( a través del proxy ) y devuelven la información a la interfaz de usuario.

  • Añadir dos referencias.a Microsoft.Data.WebClient y a NorthwindModel ( proxy ).
  • En el constructor de la clase añadimos el código necesario para crear el proxy, un objeto de tipo NorthwindEntities.

image

 

  • Para recuperar la información podemos hacerlo de dos maneras; usando la clase WebDataQuery o usando LINQ.

image

  • Carga DataGridView los clientes que devuelve el servicio.
    • NorthwindService ns = new NorthwindService();
    • CustomerGridView.DataSource = ns.GetCustomers();

  • Ya ya está…
    • F5 de la aplicación Windows, teniendo previamente en ejecución el servicio de ADO.NET Data Service.

 

image

Y para el siguiente post un paso más, cómo consumir el servicio con Ajax….

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

4 comentarios en “ADO.NET Data Services ( III ). Cómo consumir un servicio desde una aplicación WinForm”

  1. Hola!

    Hacer no he hecho ninguna prueba pero ADO.NET Data Services no es más que un servicio wcf que usa http binding y un modelo de datos de LINQ to Classes o Entity Framework.

    Aunque el rendimiento es importante, tb hay que valorar todo lo que da una tecnología, ya que todo no es el rendimiento….siempre hay que evaluar el coste/beneficio de una tecnología y lo que ganas y pierdes con ella.

    Lo que hace ADO.NET Data Services lo puedes construir tu mismo y ofrecer la misma funcionalidad pero aunque pudiera llegar a ser más óptimo…¿ merecería la pena el coste de desarrollo y mantenimiendo frente a esa supuesta mejora de rendimiento?

    Un saludo!

  2. Cierto es que usar LINQ o Entity Framework es añadir más capas y desde el punto de vista de rendimiento puede verse afectado en algo pero considero que éste no es un factor crítico que puede decidirnos por no usar estas dos tecnologías. Puede ir más «lento» pero considero que el salto no es tan grande como para pasar de una aplicación que no se mueve a una aplicación que vuela.

    Generlamente el problema está en otro lado, por ejemplo, en un diseño erróneo de la base de datos, falta de buenas índices etc….

    Hacerlo a mano podría ser más óptimo, aunque también tengo que decir que he visto muchas aplicaciones que se hacen a mano y las capas de acceso a datos son ineficientes y muchas veces, este acceso inficiente es el problema de rendimento.

    En la mayoría de aplicaciones que he realizado con base de datos siempre hay un tanto por ciento de consultas que son relativamente «básicas»…en este sentido seguro que LINQ o EDM lo va a hacer a la perfección y ese tanto por ciento pequeño, podría ser que también….tampoco hay que caer en la optimización temprana y dejar de usar algo por el «por si acaso.»

    A mí LINQ, EDM o ADO.NET Data Services me parecen tecnologías que pueden facilitar mucho el trabajo según en qué aplicación y considero que el rendimiento no será un problema en la elección de estas tecnologías.

    También comentabas que cuanto más capas mejor… tampoco es así, una aplicación puede necesitar una serie de capas, de abstracción pero tampoco es que cuanto más mejor…. Todo en su justa medida 🙂

    Un saludo!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *