Mostrando entradas con la etiqueta WCF. Mostrar todas las entradas
Mostrando entradas con la etiqueta WCF. Mostrar todas las entradas

miércoles, 14 de enero de 2009

He leído: Pro C# 2008 and the .NET 3.5 Platform de Andew Troelsen


Título: Pro C# 2008 and the .NET 3.5 Platform
Autor: Andrew Troelsen
Editorial: Apress
ISBN10: 1-59059-884-9
ISBN13: 978-1-59059-884-9
Páginas: 1370


En la web de Apress
En Amazon


Lo cierto es que no lo he leído en su totalidad, pero es que son más de 1300 páginas y 4 apéndices extra descargables desde la web de la editorial... :S Pero sí que leí las partes que más me interesaban y creo que ya tengo suficientes elementos de juicio para valorar este libro.

Me gustó: Este sí que es un libro realmente completo, abarca prácticamente todo lo que un desarrollador tiene que saber sobre .NET, C# y las novedades que introduce el Framework 3.5 (LINQ, expresiones lambda, tipos anónimos, novedades en WCF, WF, WPF, ASP.NET ...). Además está todo muy bien explicado, con multitud de ejemplos (también se pueden descargar los proyectos de ejemplo de la web de Apress) e imágenes que ayudan a la comprensión.


El tono del libro es bastante ameno y está bien organizado. Antes de cada capítulo el autor hace una pequeña introducción de lo que se tratará, por lo que si no te interesa puedes pasar directamente al siguiente. Y también hay un resumen al final, que está muy bien para aclarar los conceptos del capítulo.

Para que os hagáis una idea de lo completo que es este libro, tiene 2 apéndices, uno sobre interoperabilidad con componentes COM y el otro sobre MONO :o

No me gustó: Ufff, es difícil encontrarle una pega a este libro, está realmente bien y es muy completo ... por decir algo, que es un tocho de más de 1300 páginas y pesa un montón :P Pero bueno, siempre viene bien para hacer un poco de brazo en la oficina o en casa :D

Le falta: que alguien lo traduzca al castellano, porque leerlo en inglés es un poquito duro, pero bueno, ya estamos acostumbrados y el autor no se hace pesado en ningún momento.

Lo recomiendo para: todo el que quiera profundizar en el desarrollo de aplicaciones en .NET con C# y el Framework 3.5, es un gran libro tanto de aprendizaje como para tenerlo de referencia (además, fardas un montón con eso del “Pro C#” :P )

miércoles, 8 de agosto de 2007

Montar un servicio WCF en 10 pasos

Para los que no conozcáis Windows Comunication Foundation (WCF para los amigos) os dejo unos cuantos enlaces muy recomendables:

Visión Global de Arquitectura de Windows Communication Foundation

Artículos de Aaron Skonard en MSDN Magazine (aunque los veáis en inglés, redirecciona a los artículos en castellano)

Artículos de Juval Lowy en MSDN Magazine (lo mismo que los de Skonnard)

Fundamentals of WCF Security – Michele Leroux Bustamante (en inglés, pero merece el esfuerzo)

Blog de Oskar Álvarez en Geeks.ms

En este post me voy a centrar en la implementación de un servicio WCF muy básico y con pasos muy concretos (algunos mucho más fáciles que otros).

Empecemos, en Visual Studio creamos una solución en blanco (a mi me gusta trabajar así, cada cual con sus manías), a la que añadimos dos proyectos de consola (con C#): Host y Cliente.

Y ahora vamos por partes:

Proyecto Host

1. Agregar referencia al ensamblado System.ServiceModel.

2. Definir una interface con el atributo [ServiceContract] para indicar que es la que define el contrato de WCF. Los métodos de esta interface que se vayan a exponer en deben incluir el atributo [OperationContract].




[ServiceContract]
public interface IClase
{
[OperationContract]
string Funcion1();

[OperationContract]
int Funcion2();

// Este método no se expone porque no tiene el atributo
//[OperationContract]
void MetodonoImplementado();
}


3. Definir una clase que implemente la interface IClase (en un futuro post explicaré cómo se implementa una interface con sólo dos clics).



class Clase : IClase
{
string IClase.Funcion1() { return "Respuesta"; }

int IClase.Funcion2(){ return 10; }

void IClase.MetodonoImplementado(){ return; }
}




4. Añadimos un fichero de configuración (app.config) al proyecto, para establecer las propiedades del servicio.


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<!--Comportamiento se define un poco más abajo, en la sección BEHAVIORS-->
<service name="Host.Clase" behaviorConfiguration="Comportamiento">
<host>
<!--Se establece la URL del servicio-->
<baseAddresses>
<add baseAddress="http://localhost:8000/WCF/"/>
</baseAddresses>
</host>
<!--En el enpoint se define el ABC de los servicios WCF, Address, Binding y Contract-->
<endpoint address="Clase"
binding="wsDualHttpBinding"
contract="Host.IClase"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Comportamiento">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>




5. En el método Main() iniciamos el servicio.



class Program
{
static void Main(string[] args)
{
Type tipo = typeof(Clase);
using (ServiceHost miHost = new ServiceHost(tipo))
{
miHost.Open();
Console.WriteLine("Servicio en ejecución");
Console.WriteLine("Pulse una tecla para salir...");
Console.ReadKey();

miHost.Close();
}
}




6. Ejecutamos únicamente el proyecto Host.

7. Desde la consola de Visual Studio * ejecutamos la herramienta svcutil.exe, que creará los ficheros que servirán de proxy entre el cliente y el servicio.




Se crean 2 ficheros:
- Clase.cs - definición del proxy.
- Output.config - fichero de configuración, que debe ser renombrado como
app.config para los proyectos Windows (web.config para proyectos Web)

* Consola de Visual Studio, la podemos encontrar en: Inicio - Todos los programas - Microsoft Visual Studio 2005 - Herramientas de Visual Studio


Paramos la ejecución y pasamos al otro proyecto.

Proyecto Cliente

8. Agregamos la referencia al ensamblado System.ServiceModel, igual que el paso 1 del proyecto Host.

9. Añadimos los ficheros que genera la herramienta svcutil.exe (paso 7 del proyecto Host), Clase.cs y app.config.

10. En el método Main() iniciamos el proxy y ejecutamos los métodos.

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Pulse cualquier tecla cuando el servicio esté iniciado...");
Console.ReadKey();

using (ClaseClient proxy = new ClaseClient(“WSDualHttpBinding_IClase”))
{
Console.WriteLine(proxy.Funcion1());
Console.WriteLine(proxy.Funcion2().ToString());
Console.WriteLine("Pulse cualquier tecla para salir...");
Console.ReadKey();
proxy.Close();
}
}
}




Ya lo tenemos todo listo, vamos a probarlo, para ello tenemos que ejecutar los dos proyectos al mismo tiempo, por lo que en las propiedades de la solución hay que establecer Proyectos de inicio múltiples y establecer la acción de ambos proyectos a Iniciar, y ejecutar (F5).



Por supuesto que WCF es mucho más complejo, pero como toma de contacto creo que está bien, en próximos post entraremos en profundidad en más características.