WCF (Indigo): si quieres no tienes porqué utilizar un proxy formado a través del wsdl del servicio

Poco a poco voy conociendo cosas nuevas del Indigo, pero una de las que más me ha gustado ha sido el hecho de no tener que definir un proxy mediante wsdl. La gracia consiste en que compartes la interfaz del servicio a ambos lados de la comunicación y eso queda ya como proxy, no la guarrería que te forma svcutil.

Esto tampoco es un grandísimo avance, pero hace que los proyectos, y las comunicaciones, queden más limpios y no haya que refrescar los proxys. Por supuesto esto es únicamente útil cuando se controlan los dos puntos de la comunicación, pero en esos casos me parece la mejor opción. Al principio da un poco de cosa no tener la referencia en el proyecto, pero luego te acostumbras 😛

Ejemplo de como quedaría:

DLL común entre el cliente y el servidor, se referencia a ambos lados de la comunicación:

namespace Comun
{
[ServiceContract()]
public interface IServicioIndigo
{
[OperationContract]
string MyOperation1(DataSetPrueba ds);
}
}

 Servidor que implementa la interfaz (no varía respecto a otro servicio indigo normal)

public class servicioIndigo : Comun.IServicioIndigo
{
public string MyOperation1(DataSetPrueba ds)
{
return "Hello: "
}
}

Cliente (aquí hay alguna pijada):

class PruebaEnCliente
{
public PruebaEnCliente()
{
ChannelFactory<IServicioIndigo> cf =new ChannelFactory<IServicioIndigo>("ep");

IServicioIndigo isic = cf.CreateChannel();

using (isic as IDisposable )
{
DataSetPrueba dsp =new DataSetPrueba();

ClaseComun cm = new ClaseComun(dsp);

Console.WriteLine(isic.MyOperation1(dsp));
}
}
}

Por cierto, me dí cuenta de esto buscando como pasar un dataset tipado del servidor al cliente y que mantenga el tipo exacto, no te forme el global::blablabla. También descubrí que svcutil /r: referenciadondeestáeltipo consigue ese efecto, no te forma el tipo global y le tienes que pasar la dll que lo contenga al cliente.

Pues nada, espero que a alguien le parezca interesante.

Advertisements

One comment

  1. William · · Reply

    Excelente información, me resultó de mucha utilidad.Gracias!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: