Generador de canales
El ejemplo ChannelFactory muestra cómo una aplicación cliente puede crear un canal con la clase ChannelFactory en lugar de un cliente generado. Este ejemplo se basa en la Introducción que implementa un servicio de calculadora.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Este ejemplo utiliza la clase ChannelFactory<TChannel> para crear un canal a un extremo de servicio. Normalmente, para crear un canal a un punto de conexión de servicio, usted genera un tipo de cliente con la herramienta de utilidad de metadatos ServiceModel (Svcutil.exe) y crea una instancia del tipo generado. También puede crear un canal utilizando la clase ChannelFactory<TChannel>, tal y como se muestra en este ejemplo. El servicio que crea el código de ejemplo siguiente es idéntico al servicio en la Introducción.
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();
Importante
Si está ejecutando este ejemplo en un escenario con varios equipos, debe reemplazar el "host local" en el código anterior con el nombre completo del equipo que está ejecutando el servicio. Este ejemplo no utiliza la configuración para establecer la dirección del punto de conexión, por lo que se debe hacer en el código.
Una vez creado el canal, se pueden invocar operaciones de servicio de la misma manera que con un cliente generado.
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
Para cerrar el canal, se debe convertir primero a una interfaz IClientChannel. Esto es porque cuando se genera el canal se declara en la aplicación cliente utilizando la interfaz ICalculator
, que cuenta con métodos como Add
y Subtract
pero no Close
. El método Close
se origina en la interfaz ICommunicationObject.
// Close the channel.
((IClientChannel)client).Close();
Al ejecutar el ejemplo, las solicitudes y respuestas de la operación se muestran en la ventana de la consola del cliente. Presione ENTRAR en la ventana de cliente para cerrar la aplicación del cliente.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Configurar, compilar y ejecutar el ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples. Observe que este ejemplo no permite la publicación de metadatos. Debe habilitarla primero para este ejemplo con objeto de regenerar el tipo de cliente.
Para ejecutar el ejemplo en una configuración de una sola máquina o de varias máquinas, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en varios equipos
Reemplace el "host local" en el código siguiente con el nombre completo del equipo que está ejecutando el servicio.
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");