ADO.NET Data Services ( IV ). Consumir un servicio con Ajax

Después de ver cómo se puede consumir un servicio de ADO.NET Data Services desde una aplicación WinForm, ahora toca ver cómo puede hacerse lo mismo desde Ajax.

Para poder acceder desde Ajax es necesario referenciar la versión 3.6.0.0 de System.Web.Extensions. Asegúrate que en el proyecto tienes referenciada la versión adecuada.

Esta versión se incluye con ASP.NET 3.5 Extensions Preview. ( incluye el fichero MicrosoftAjaxDataService.js que es necesario para poder consumir el servicio de ADO.NET Data Services ).

Si el proyecto que has creado usa la versión 3.05.00, en el fichero de configuración Web.Config puede cambiarlo para que empiece a usar la 3.06.00.

<dependentAssembly>

<assemblyIdentity name=”System.Web.Extensions” publicKeyToken=”31bf3856ad364e35“/>

<bindingRedirect oldVersion=”3.5.0.0” newVersion=”3.6.0.0“/>

</dependentAssembly>

Para acceder al servicio es necesario se hace uso de Sys.Data.DataService.

function doQuery() {

var northwindService = new Sys.Data.DataService(“/NorthwindService.svc“); northwindService.query(“/Customers“, cbSuccess, cbFailure);

}

( cbSuccess y cbFailure son las funciones de callback a las que se llamará en caso de que todo vaya bien o de que haya algún error )

Es importante tener en cuenta, que sólo se permite llamar a servicios que estén en el mismo dominio..

function cbFailure(error, context, operation) {

$get(“spanResults“).innerHTML = “Error ” + operation + “.”;
}

function cbSuccess(result, context, operation) {

var sb = new Sys.StringBuilder();
sb.append(“<table>“);

var firstRowOutput = false;
for (idx in result) {
    var customer = result[idx];
    if (!firstRowOutput) {
        sb.append(“<tr>“);
        for (key in customer) {
           if (key != “__metadata“) {
                sb.append(“<th>“);
                sb.append(key);
                sb.append(“</th>“);
            }        
        }
        sb.append(“</tr>“);
        firstRowOutput = true;
    }
    sb.append(“<tr>“);
    for (key in customer) {
        if (key != “__metadata“) {
            sb.append(“<td>“);
            sb.append(customer[key]);
            sb.append(“</td>“);
        }
    }
    sb.append(“</tr>“);

}

sb.append(“</table>“);     
$get(“spanResults“).innerHTML = sb.toString();

}

En este caso podemos observar que el formato de los datos es JSON.

image

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….

ADO.NET Data Services ( II ). Consultar el servicio a través del navegador..

En el post anterior veíamos cómo podíamos crear un servicio de ADO.NET Data Services de una manera sencilla.

En este post, veremos cómo esta información se puede llegar a consumir desde el navegador, usando URI con formato REST.

Arrancar el ejemplo que veíamos en el post anterior y desde el navegador podéis probar estas URI que indico a continuación.

( Para ver la información en formato XML en el nevagador hay que tener desactivada los RSS Feeds en el nevegador. En Tools>Internet Options>Content>Feed ).

Recuperar todo el contenido de la tabla Customers.

Recuperar todo la información del cliente con CustomerId = ‘ALFKI’

Recuperar el Campo City del cliente con CystomerId = ‘ALFKI’

Recuperar los dos primeros clientes

Recuperar los dos primeros clientes ordenador por páis.

 

Con “Web Development Helper” o con cualquier otra aplicación de este estilo se puede ver que la petición/respuesta es una petición HTTP normal. Por defecto, el formato de la información que se devuelve es XML.

image

En el siguiente post, daremos un paso más y veremos cómo podemos hacer que desde una aplicación cliente ( WinForm, WPF, Javascript…..) podemos consumir el servicio de ADO.NET Data Services.

[Artalde.NET] Workflow Foundation, más allá del código

Ya tenemos fecha para el próximo evento del grupo Artalde. Será el próximo 29 de mayo en la universidad de Deusto.


 


La agenda:



  •  19:00 Registro. 

  • 19:15 Introducción a los Workflow. ¿Por qué debo incluir un workflow en mi aplicación?


    • Demo: Hola mundo en Workflow secuencial 

    • Tipos de Workflows, arquitectura de aplicación WF, actividades 

    • Demo: Actividades 

    • Servicios de WF: Tracking y persistencia 

    • Introducción a las máquinas de estado 

    • Ejemplo de máquina de estados 

    • Integración WF-WCF 
Gorka Elexgaray ( Sisteplant )  y Rafa Ortega ( Avangroup ) serán los ponentes.

No olvidéis registraros si estáis interesados en acudir. Registro.

ADO.NET Data Services. Paso a paso ( I )

Anteriormente ya había comentado algunos de los conceptos que definen a ADO.NET Data Services.


En este post mostraré cómo, de una manera muy sencilla, podemos crear un servicio de ADO.NET Data Services.


 



  • New Project>Crear WebApplication

image



  • Quitar Default.aspx que viene por defecto, ya que no es necesario.

  • Creamos el modelo de datos.

    • Add>New Item>ADO.NET Entity Data Model . (podría ser LINQ to Classes)
    • Le llamamos NorthwindModel.edmx.
    • Seleccionar la conexión con Northwind.

image


image


 



  • Creamos el servicio a través del cuál expondremos el modelo.

    • Add>New Item>ADO.NET Data Service.
    • Le llamamos NorthwindService.svc

 


image


image


 



  • Asociamos el modelo al servicio.

    • Abrir NorthwindService.svc.cs
    • Añadir referencia al modelo ( “using NorthwindModel”  );
    • Asociar al modelo con el servicio.

      • WebDataService<NorthwindEntities>

 



  • Configurar las entidades a exponer, a través de SetResourceContainerAccessRule.

    • Se pueden indicar las entidades expuestas.
    • Se pueden indicar las operaciones permitidas sobre las entidades.
    • Se pueden indicar las operaciones expuestas.
    • Se pueden indicar las operaciones permitidas sobre las operaciones.

image


 



  • Y ya tenemos el servicio preparado.


    • Si pulsamos F5 podremos que que sale algo como lo que se ve en la última imagen.
    • http://localhost:3895/NorthwindService.svc/
    • Por defecto, se ven todas las entidades del modelo, porque hemos puesto “*”.
    • Podrías haber puesto…


      • config.SetResourceContainerAccessRule(“Customers”, ResourceContainerRights.AllRead);

    • y sólo haber expuesto la tabla Customers.

image


En el siguiente post veremos cómo podemos, desde el navegador y usando URI estilo REST, manipular la información que expone el servicio…..y otro tercer post, mostraré cómo puede consumirse este servicio desde una aplicación cliente.

Error creando UnitTest con VStudio 2008 Database Edition

Me he encontrado este error al crear unit test de base de datos….

Error

Los unit test los intentaba crear desde la pestaña de “schema”, seleccionando un procedimiento almacenado y dándole a “Create Unit Test”.

Una vez seleccionaba esta acción, me salía la ventana indicando que se iba a crear el unit test y dónde seleccionaba la clase dónde quería incluir la prueba.

Y cuando finalmente le daba a generar, me salía el error que sale en la imagen que pongo…..me creaba el fichero .cs pero no el fichero .resx.

¿ Y cuál es el problema? Pues el problema se llama VStudio 2008 Database Edition Power Tools.

¿Solución? Desinstalar y listo!!!

Si aún así necesitáis o queréis instalarlas, porque hay alguna otra funcionalidad que os interesa también hay alternativa.

Una primera alternativa, es no crear los unit test desde el menú contextual que mencionaba anteriormente y simplemente crearlos manualmente desde el diálogo de “add new test”. No lo recomiendo, mucho trabajo…

Otra alternativa es modificar el fichero %ProgramFiles%Microsoft Visual Studio 9.0DBProMicrosoft.VisualStudio.TeamSystem.Data.PowerTools.Extensions.xml y deshabilitar las características nuevas que incluyen las power tools para las pruebas unitarias.

Hay que quitar dos entradas que incluyen una referencia a Microsoft.VisualStudio.TeamSystem.Data.PowerTools.UnitTesting.Conditions.XXXX.

A mí me ha costado un buen rato encontrar el error, espero que a vosotros no os pase lo mismo!

ADO.NET Data Services. Ideas claves

En este primer post sobre ADO.NET Data Services intentaré incluir las ideas principales que definen lo que incluye esta nueva tecnología, para posteriormente realizar varios ejemplo paso a paso para enseñar cómo empezar con ella.

  • ¿ Qué es ADO.NET Data Services ?

“ADO.NET Data Service es un framework combinación de patrones y librerías que permiten la creación y consumo de servicios de datos en la web.

El objetivo principal es facilitar la creación de servicios de datos flexibles que normalmente se integran de manera natural en la web.

ADO.NET Data Services se basa en mecanismos y tecnologías a las que se está habituado, como el uso de URLs, XML o JSON.

El resultado de los servicios es una colección de recursos con estilo REST que pueden ser consultados a través de direcciones URLs, pudiendo usar los protocolos habituales de HTTP, como GET,POST o DELETE”.

  • ¿ Está disponible ya una versión final de esta característica ?

No está en release. La versión release estará disponible con el SP1 de Visual Studio 2008.

La última versión de ADO.NET Data Services se incluye con el SP1 Beta de Visual Studio, aunque hay versiones que no requieren el SP, por si queréis probarlo sin tener el SP1 Beta instalado.

  • Es independiente del formato.

Es el cliente que consume el servicio quién decide en qué formato quiere manejar la información. Actualmente se soporta XML y JSON. Por defecto, XML.

  • Independiente del almacenamiento.

Soporta diferentes modelos:

    • EDM. ( SQL, Oracle, DB2, MySql etc….)
    • LINQ to SQL Classes
    • Cualquier clase que herede de IQueryable.

  • Cualquier tipo de aplicación puede consumir un servicio ADO.NET Data Services;

WinForms, WPF, Silverlight, AJAX….

  • Para el manejo de información se usan URI con estilo REST.

Algunos ejemplos de URIs estilo REST.

o Contenido de la tabla Customers. 

http://localhost:3895/NorthwindService.svc/Customers

o Cliente con CustomerId = ‘ALFKI’

http://localhost:3895/NorthwindService.svc/Customers(‘ALFKI’)

o Campo City del cliente con CystomerId = ‘ALFKI’

http://localhost:3895/NorthwindService.svc/Customers(‘ALFKI’)/City

o Los dos primeros clientes 

http://localhost:3895/NorthwindService.svc/Customers?$top=2

o Los dos primeros clientes ordenador por país. 

http://localhost:3895/NorthwindService.svc/Customers?$top=2&$orderby=Country

  • Como mecanismos de autenticación usa los mismos que  el host que contiene el servicio.

Normalmente este host es ASP.NET.

ASP.NET Dynamic Data. Paso a paso..

Después de comentar en un post anterior las ideas claves para conocer ASP.NET Dynamic Data, en este post aprovecharé para enseñar un ejemplo, paso a paso, de cómo crear una aplicación con ASP.NET Dynamic Data.


·         New  WebSite> Dynamic Data WebSite ( Preview ) 


image


·         Este proyecto incluye algunas páginas y plantillas por defecto.


Directorio DynamicData>FieldTemplates


Controles de usuarios que se usarán para la creación de los formularios. Cada tipo tiene uno.


Directorio DynamicData>PageTemplates


Las plantillas por defecto que se usarán para renderizar las páginas


Directorio DynamicData>CustomPages


Páginas personalizadas que redefinen las plantillas de páginas.



image


 

·        Añadimos el modelo sobre el que funcionará ASP.NET Dynamic Data.



Add>New Item>LINQ to SQL Classes.


Le llamamos NorthwindModel.dblm ( usamos la ddbb de ejemplo Northwind ).


Abrir conexión a la ddbb desde Server Explorer y arrastrar las tablas que os interesen. Por ejemplo Customer, Order, OrderDetail, Product y Category.



image

 


·         Asociar el modelo a mostrar con la interfaz de usuario.



Esta operación se realiza modificando el fichero Global.asax.


model.RegisterContext(typeof(NorthwindModelDataContext), new ContextConfiguration() { ScaffoldAllTables = true });


NorthwindModelDataContext es el nombre de la clase que se ha generado al crear el modelo LINQ.


Se pone a true la opción ScaffoldAllTables para indicar que use todas las tablas del modelo. ( podría configurarse para exponer sólo parte del modelo ).


 


·         Basado en ASP.NET MVC…


En Global.asax se puede ver cómo se registran las rutas/urls que se usan en MVC:

routes.Add(new DynamicDataRoute(“{table}/ListDetails.aspx”) {            Action = PageAction.List,            ViewName = “ListDetails”,            Model = model

        });


·         Si pulsáis F5 ya podréis ver la aplicación funcionando y lo que se ha generado….


ya podéis jugar con ello y sobre todo fijaros en cómo se muestran las relaciones, cuando se visualiza la información pero también cuando se añade un elemento…que tiene relación con otras tablas.



image



image


image


image

 


 


 

ASP.NET Dynamic Data. Ideas claves

El pasado 29 de abril ya comenté que hice una presentación de algunas de las novedades de ASP.NET Extensions en el grupo de usuarios de Artalde.NET.

En un post anterior incluía una serie de recursos para poder ponerse al día con ASP.NET MVC.

En este caso, toca hablar de ASP.NET Dynamic Data. En este primer post comentaré, de manera resumida, algunas ideas claves para conocer un poquito mejor ASP.NET Dynamic Data. En los siguientes post incluiré una serie de ejemplos paso a paso para conocer mejor la tecnología.

¿ Qué es ASP.NET Dynamic Data?

ASP.NET Dymanic Data es una característica que permite la creación rápida de aplicaciones web dirigidas por datos. ( las típicas aplicaciones de alta/bajas/modificaciones…..)

Ofrece un framework que permite la creación de aplicaciones web basándose en ASP.NET WebForms y ASP.NET MVC.

Extiende la funcionalidad de ASP.NET incluyendo un mecanismo que permite la visualización dinámica de páginas basada en un modelo de datos de la capa de base de datos.

¿ Está disponible ya una versión final de esta característica ?

No está en release. La versión release estará disponible con el SP1 de Visual Studio 2008, que actualmente está en Beta1. ( acaba de salir la Beta 1 de Visual Studio 2008 ).

La última versión disponible es del  12/05. Esta versión requiere tener instalado el SP1 Beta de Visual Studio.

Las versiones anteriores no requerían tener instalado el SP1, así que si queréis probarlo y no tenéis o no queréis instalar el SP1 Beta, podéis usar una versión anterior.

¿ Cómo funciona ?¿ Cómo de personalizable es ?

Se basa en conceptos típicos de ASP.NET como master pages o css y en una serie de plantillas y controles de usuario que vienen por defecto y que nos posibilidad que se pueda crear una aplicación completa sin tirar una línea de código, usando las opciones por defecto.

Todo es personalizable….la master pages, los css, los controles de usuario….todo, todo, todo…aunque diré, que para muchos escenarios con poca personalización la funcionalidad que ofrece es más que suficiente.

¿ Cómo maneja la información ?

Para poder trabajar con ASP.NET Dynamic Data es necesario definir un modelo de datos, sobre el cuál se generarán las páginas típicas de altas/bajas/modificaciones.

Soportará dos opciones:

  • LINQ to Classes. (LinqDataSource)
  • Entity Framework. (EntityDataSource)

Digo soportará, porque de momento no soporta EDM, al menos antes de la salida del SP1 de Visual Studio. Con esta última versión no lo he probado, pero en la documentación que he leído no lo he visto escrito de forma explícita.

¿ Tiene alguna relación con ASP.NET MVC ?

Sí, ASP.NET Dynamic Data se basa en ASP.NET MVC.

¿ Realmente es útil?

En mi opinión sí.

Para aplicaciones de altas/bajas/modificaciones puede ser un avance tremendo y ahorrar bastante tiempo de desarrollo. Eso sí, tampoco digo que sea la panacea!!

Por ejemplo, para las típicas páginas de administración de tablas maestras puede venir perfecto.

Por lo que he probado, el grado de personalización que soporta también hace que pueda valer para muchos más escenarios que para hacer administración de páginas maestras.