Multicast with WCF 3.5

Para escenarios de Arquitecturas Distribuidas con Multicast usando WCF 3.5 una opción posible es la siguiente:

[ServiceContract(Namespace = "http://servicios.cliente/2009/06", Name = "IRouter")]
public interface IServiceRouter
{
   [OperationContract(ReplyAction = "*", Action = "*")]
   Message ForwardMessage(Message message);
}

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
class ServiceRouter : IServiceRouter
{
               
        #region IRouter Members
 
        public Message ForwardMessage(Message message)
        {
            Message BogotaServer;
            Message localServer;
 
            MessageBuffer messageBuffer = message.CreateBufferedCopy(int.MaxValue);
            Message messageCopy = messageBuffer.CreateMessage();
            Message messageCopy2 = messageBuffer.CreateMessage();
 
 
            //Almacenamiento en servidor local finca   
            int headerLocalIndex = message.Headers.FindHeader("Key", "http://serviciosproduccionCP");
            if (headerLocalIndex != -1)
            {
                string localHost = message.Headers.GetHeader<string>(headerLocalIndex);
                ChannelFactory<IServiceRouter> client = new ChannelFactory<IServiceRouter>(localHost);
                localServer = (client.CreateChannel()).ForwardMessage(messageCopy);
            }
            else
            {
                throw new InvalidOperationException("No se puede encontrar la cabecera 'local'");
            }
 
            //Almacenamiento en servidor de Bogotá.  
            int headerBogotaIndex = message.Headers.FindHeader("Key", "http://serviciosproduccionBogota");
            if (headerBogotaIndex != -1)
            {
                string bogotaHost = message.Headers.GetHeader<string>(headerBogotaIndex);
                ChannelFactory<IServiceRouter> client = new ChannelFactory<IServiceRouter>(bogotaHost);
                BogotaServer = (client.CreateChannel()).ForwardMessage(messageCopy2);
            }
            else
            {
                throw new InvalidOperationException("No se puede encontrar la cabecera 'bogota'");
            }
 
            return BogotaServer; 
 
        }
 
        #endregion
    }
 

Este código analiza la información enviada por el cliente y crea una copia del mensaje que es distribuido posteriormente a los servidores que estén registrados en el encabezado del mensaje. Esta técnica de enrutamiento se basa en Contenido, el contenido del header del mensaje SOAP.

 

 

Juan Peláez

3Metas Corp.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *