Web Services
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
Need Expert Help?
Let's discuss how I can help with your technical challenges
Schedule a Consultation