Utilizando Linq Con WCF
Utilizando Linq Con WCF
Utilizando Linq Con WCF
com
Paso 1:
Crear un proyecto de tipo WCF – WCF Service Application dentro de Visual Studio 2010.
Paso 2:
Crear una tabla como la siguiente desde SQL Server 2008. (Este tutorial se basará en esta tabla
de ejemplo):
Paso 3:
Dentro de la arquitectura de LINQ, usted puede encontrar: LINQ a Objetos, LINQ a SQL, LINQ a
Datasets, LINQ a Entidades y LINQ a XML.
En tutorial se basará a LINQ a SQL, en donde se mostrará el mapeo de tablas a clases de forma
manual, sin ocupar el diseñador por default de LINQ to SQL Classes.
Para mapear las tablas en clases, usted debe crear cada clase para cada tabla ya sea por su
nombre actual de la base de datos o especificándola dentro de la clase, por ejemplo: Si usted
tiene una tabla llamada Clientes, puede crear una clase llamada Clientes de la siguiente
manera:
using System;
using System.Data.Linq.Mapping;
namespace WCFLinq
{
[Table]
public class Clientes
{
}
}
Tecnologías Microsoft http://mredison.wordpress.com
O crear una clase con otro nombre, siempre y cuando se especifique el nombre real de la tabla,
de la siguiente forma:
using System;
using System.Data.Linq.Mapping;
namespace WCFLinq
{
[Table(Name="Clientes")]
public class Cliente
{
}
}
Paso 4:
Tiene que especificar las columnas de la tabla como propiedades dentro de la clase, si la
columna es PRIMARY KEY o si es de tipo IDENTITY también se debe de especificar, de la
siguiente manera:
using System;
using System.Data.Linq.Mapping;
namespace WCFLinq
{
[Table(Name="Clientes")]
public class Cliente
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int ID { get; set; }
[Column]
public string Nombre { get; set; }
[Column]
public string Localizacion { get; set; }
}
}
Tecnologías Microsoft http://mredison.wordpress.com
Paso 5:
Ya creada la clase Clientes, cree otra clase llamada Configuracion.cs , el cual tendrá una
propiedad que regresará la cadena de conexión, de la siguiente manera:
using System;
using System.Configuration;
namespace WCFLinq
{
public class Configuracion
{
public static string CadenaConexion
{
get { return
ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString.ToString(); }
}
}
}
Paso 6:
Cree una clase que será la que se conectará a la base de datos y en donde se define la
estructura general, esta clase deriva de DataContext:
using System;
using System.Data.Linq.Mapping;
using System.Data.Linq;
namespace WCFLinq
{
[Database (Name="CURSO")]
public class Empresa:DataContext
{
}
}
Tecnologías Microsoft http://mredison.wordpress.com
Paso 7:
using System;
using System.Data.Linq.Mapping;
using System.Data.Linq;
namespace WCFLinq
{
[Database (Name="CURSO")]
public class Empresa:DataContext
{
public Empresa() : base(Configuracion.CadenaConexion) { }
}
}
Paso 8:
using System;
using System.Data.Linq.Mapping;
using System.Data.Linq;
namespace WCFLinq
{
[Database (Name="CURSO")]
public class Empresa:DataContext
{
public Empresa() : base(Configuracion.CadenaConexion) { }
}
}
Tecnologías Microsoft http://mredison.wordpress.com
Paso 9:
Defina una interfaz con los siguientes métodos, esta interfaz se implementará en el servicio
web.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
namespace WCFLinq
{
[ServiceContract]
public interface IMetodos
{
[OperationContract]
List<Cliente> ObtenerClientes();
[OperationContract]
List<Cliente> ObtenerClientesPorLocalizacion(string localizacion);
}
}
Paso 10:
Implementar la interfaz en la clase del servicio web. (En este tutorial se ha cambiado de
nombre a la clase Service1)
Tecnologías Microsoft http://mredison.wordpress.com
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace WCFLinq
{
public class Servicio : IMetodos
{
Empresa bd = new Empresa();
Paso 11:
Debe agregar una cadena de conexión dentro del web.config de la siguiente forma:
<connectionStrings>
<add name="CadenaConexion" connectionString="Data Source=.\MSPDEVELOPER;Initial
Catalog=CURSO;Integrated Security=true;"/>
</connectionStrings>
Paso 12:
ASP.NET Website
Paso 1: Agregue un nuevo sitio web a la solución:
Paso 3: Especifique la URL del servicio, en este caso el servicio debe implementar la interfaz
anteriormente creada con los métodos.
Paso 4: Dentro del proyecto ASP.NET, agregue un GridView llamado gvClientes y desde el
evento Page_Load llamará el servicio mediante el método implementado.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
Paso 6: Usted puede realizar consultas sobre consultas con LINQ de manera muy fácil y
dinámica. Por ejemplo existe un método llamado ObtenerClientes() que regresa toda la
información de los clientes, id, nombre y localización. Si se requiere solamente las
localizaciones pero que no se repitan y que se muestren dentro de un DropDownList. Usted
puede definir una subconsulta de la siguiente manera:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
ddLocalizacion.DataSource = consulta.ToList();
ddLocalizacion.DataBind();
}
}
Tecnologías Microsoft http://mredison.wordpress.com
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
ddLocalizacion.DataSource = consulta.ToList();
ddLocalizacion.DataBind();
}
}
protected void ddLocalizacion_SelectedIndexChanged(object sender, EventArgs e)
{
gvClientes.DataSource =
proxy.ObtenerClientesPorLocalizacion(ddLocalizacion.SelectedItem.Text);
gvClientes.DataBind();
}
}
Tecnologías Microsoft http://mredison.wordpress.com
Este documento ha sido elaborado por Edison Daniel García Chiñas para el blog de
Tecnologías Microsoft para distribución gratuita.
http://mredison.wordpress.com