16 de diciembre de 2015

Multiples bindings WCF

Para empezar quiero mostrar la información del sitio de Microsoft sobre múltiples bindings(click sobre la imagen para leer mejor)


A continuación presento una combinación de endpoints validos en un servicio WCF

Binding(B1) + Address(A1) + Contract(C1)  —>  EndPoint valido
Binding(B1) + Address(A2) + Contract(C1)  —>  EndPoint valido
Binding(B1) + Address(A1) + Contract(C2)  —>  EndPoint valido
Binding(B1) + Address(A1) + Contract(C3)  —>  EndPoint valido

Binding(B2) + Address(A2) + Contract(C1)  —>  EndPoint valido
Binding(B3) + Address(A3) + Contract(C1)  —>  EndPoint valido

Con el ejemplo anterior dejamos claro dos cosas:

1) Múltiples Endpoints:
 Address compartida - Bindings iguales - Contracts diferentes

Es permitido que múltiples EndPoints utilicen el mismo tipo de binding e incluso tener la misma dirección pero pueden diferir en el contrato, esto es un beneficio ya que logra definir para diferentes clientes uno y solamente un binding, definir una única dirección para diferentes endpoints  y entregar a diferentes clientes la misma dirección de referencia al servicio WCF pero cada cliente tendrá diferentes operaciones disponibles esto se logra definiendo distintas operaciones en diferentes interfaces.

Como ejemplo para este caso se creara un proyecto WCF Service el cual tendrá tres interfaces y una clase que las implementa, el solution explorer del proyecto queda de esta manera


en la siguientes imágenes expongo el código de las interfaces, solamente definen un método string que devuelve un saludo al usuario indicando que interface se implementa, la interface IGeneral hereda de la interface IBinding01 y de la interface IBinding02 tal como se muestra en el código

interface IBinding01.cs

interface IBinding02.cs
interface IGeneral.cs

y el código de Binding.cs que es la clase que implementa la interface IGeneral es 


como ven en el código anterior, en la clase Binding solamente implemento la interface IGeneral pues esta contiene los métodos definidos en IBinding01, y IBinding02, pero si ustedes quieren especificar las interfaces por separado e implementar explícitamente los métodos de cada interface también es valido el procedimiento que se utiliza en esta entrada, de hecho el cambio solamente sería en la clase Binding al momento de especificar las interfaces después todo lo que se aplica a continuación es exactamente lo mismo asi que tu decides como codificas tu clase Binding, aquí muestro el ligero cambio en la clase Binding cuando se quiera especificar explícitamente cada interface a implementar


este es la configuración del Web.config para múltiples endpoints con el mismo tipo de binding, mismo servicio pero diferente contrato

  
    
      
        
          
        
      
    
    
      
        
        
        
        
        
          
            
          
        
      
    
    
  
  
    
  
    
        
    

El proyecto se aloja en IIS, ahora procedere a crear un proyecto de tipo Windows Forms que actuara como cliente del servicio WCF, muestro la imagen para agregar la referencia de servidor


el intellisense de Visual Studio ahora reconoce las tres interfaces definidas en el servico WCF


este es el formulario a utilizar


por ultimo el codigo del formulario que actúa como cliente y también la imagen del formulario con los mensajes provenientes desde cada contrato
private void button1_Click(object sender, EventArgs e)
 {
  cliente.GeneralClient cliente = new ClienteWCF.cliente.GeneralClient();
  label1.Text = cliente.saludo01(textBox1.Text.ToString());
  label2.Text = cliente.saludo02(textBox1.Text.ToString());
  label3.Text = cliente.saludoGeneral(textBox1.Text.ToString());
 }


2) Múltiples Endpoints:
 Address diferentes - Bindings diferentes - Contract igual

Si por el contrario cada endpoint utiliza un binding diferente entonces se hace necesario crear diferentes direcciones de acceso al servicio WCF, en este caso es valido utilizar el mismo contrato para todos los endpoints, no es necesario crear uno nuevo por cada binding.
El beneficio aquí es que el servicio WCF y las mismas operaciones definidas en este estarán disponibles para diferentes protocolos de acceso.

Como ejemplo se crearan tres endpoints con tres diferentes bindings, como se puede ver en el código cada endpoint especifica una dirección única que será el distintivo del binding utilizado

  
 
  

  
  
  
  
  
  
  





También se pueden especificar todas las direcciones a utilizar en el nodo

















  
    
      
      
    
  

Related Posts:

  • Configuración Web.config netTcpBindingesta configuración de Web.config me funciono para un proyecto WCF Service hospedado en IIS utilizando un endpoint netTcpBinding recordar también que la aplicación que se ha hospedado en IIS debe tener habilitados los protocol… Read More
  • Creando WCF Service Library con IIS HostAntes de empezar les dejo esta respuesta de un foro que habla acerca de la diferencia entre WCF Service Application y WCF Service Library En esta entrada vamos a crear un proyecto WCF Service Library que se va hospedar en… Read More
  • Crear, hospedar(IIS) y consumir WCF Service AppWCF es la evolución de las tecnologías Web Service de Microsoft de años anteriores ya que provee un amplio rango de funcionalidad por encima de web services, con mejores características en aspectos de calidad como flexibilida… Read More
  • Configuración de un servicio WCFxml version="1.0" encoding="UTF-8"?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> … Read More
  • CRUD consumiendo un servicio WCF Toca realizar operaciones a la base de datos en SQL Server desde un servicio WCF, para esto hay dos maneras, ya sea a la antigua con ADO.NET utilizando procedimientos almacenados y los famosos SqlCommand o bien por el lado d… Read More