Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El servicio de enrutamiento es un intermediario SOAP genérico que actúa como enrutador de mensajes. La funcionalidad principal del servicio de enrutamiento es la capacidad de enrutar los mensajes en función del contenido del mensaje, lo que permite reenviar un mensaje a un punto de conexión de cliente basado en un valor dentro del propio mensaje, en el encabezado o en el cuerpo del mensaje.
El RoutingService está implementado como un servicio Windows Communication Foundation (WCF) en el espacio de nombres System.ServiceModel.Routing. El servicio de enrutamiento expone uno o varios puntos de conexión de servicio que reciben mensajes y, a continuación, enrutan cada mensaje a uno o varios puntos de conexión de cliente en función del contenido del mensaje. El servicio proporciona las siguientes características:
Enrutamiento basado en contenido
Agregación de servicios
Control de versiones del servicio
Enrutamiento por prioridad
Configuración dinámica
Puenteo de protocolos
Procesamiento SOAP
Control avanzado de errores
puntos de conexión de reserva
Aunque es posible crear un servicio intermediario que logre uno o varios de estos objetivos, a menudo una implementación de este tipo está vinculada a un escenario o solución específico y no se puede aplicar fácilmente a las nuevas aplicaciones.
El servicio de enrutamiento proporciona un intermediario SOAP genérico, configurable dinámicamente que es compatible con los modelos de servicio y canal wcF y permite realizar el enrutamiento basado en contenido de mensajes basados en SOAP.
Nota:
El servicio de enrutamiento no admite actualmente el enrutamiento de los servicios REST de WCF. Para enrutar las llamadas REST, considere la posibilidad de usar System.Web.Routing o el enrutamiento de solicitudes de aplicación.
Enrutamiento basado en contenido
El enrutamiento basado en contenido es la capacidad de enrutar un mensaje en función de uno o varios valores contenidos en el mensaje. El servicio de enrutamiento inspecciona cada mensaje y lo enruta al punto de conexión de destino en función del contenido del mensaje y la lógica de enrutamiento que cree. El enrutamiento basado en contenido proporciona la base para la agregación de servicios, el control de versiones del servicio y el enrutamiento de prioridad.
Para implementar el enrutamiento basado en contenido, el servicio de enrutamiento se basa en MessageFilter implementaciones que se usan para que coincidan con valores específicos dentro de los mensajes que se van a enrutar. Si un MessageFilter coincide con un mensaje, el mensaje se enruta al punto de conexión de destino asociado al MessageFilter. Los filtros de mensaje se agrupan en tablas de filtro (FilterTableCollection) para construir una lógica de enrutamiento compleja. Por ejemplo, una tabla de filtros puede contener cinco filtros de mensajes mutuamente excluyentes que hacen que los mensajes se enruten a solo uno de los cinco puntos de conexión de destino.
El servicio de enrutamiento permite configurar la lógica que se usa para realizar el enrutamiento basado en contenido, así como actualizar dinámicamente la lógica de enrutamiento en tiempo de ejecución.
A través de la agrupación de filtros de mensajes en tablas de filtros, se puede construir la lógica de enrutamiento que le permite controlar varios escenarios de enrutamiento, como:
Agregación de servicios
Control de versiones del servicio
Enrutamiento por prioridad
Configuración dinámica
Para obtener más información sobre los filtros de mensajes y las tablas de filtros, consulte Introducción al enrutamiento y Filtros de mensajes.
Agregación de servicios
Mediante el enrutamiento basado en contenido, puede exponer un punto de conexión que reciba mensajes de aplicaciones cliente externas y, a continuación, enruta cada mensaje al punto de conexión interno adecuado en función de un valor dentro del mensaje. Esto resulta útil para ofrecer un punto de conexión específico para una variedad de aplicaciones back-end y también para presentar un punto de conexión de aplicación a los clientes al mismo tiempo que se factorice la aplicación en una variedad de servicios.
Control de versiones del servicio
Al migrar a una nueva versión de la solución, es posible que tenga que mantener la versión anterior en paralelo para atender a los clientes existentes. A menudo, esto requiere que los clientes que se conecten a la versión más reciente deben usar una dirección diferente al comunicarse con la solución. El servicio de enrutamiento permite exponer un punto de conexión de servicio que atiende ambas versiones de la solución mediante el enrutamiento de mensajes a la solución adecuada en función de la información específica de la versión contenida en el mensaje. Para obtener un ejemplo de esta implementación, consulte How To: Service Versioning.
Enrutamiento de prioridad
Al proporcionar un servicio para varios clientes, es posible que tenga un acuerdo de nivel de servicio (SLA) con algunos asociados que requieran que todos los datos de estos asociados se procesen por separado de los de otros clientes. Mediante el uso de un filtro que busca información específica del cliente contenida en el mensaje, puede enrutar fácilmente los mensajes de asociados específicos a un punto de conexión que se ha creado para cumplir sus requisitos de Acuerdo de Nivel de Servicio.
Configuración dinámica
Para admitir sistemas críticos, donde los mensajes deben procesarse sin interrupciones del servicio, es fundamental poder modificar la configuración de componentes dentro del sistema en tiempo de ejecución. Para admitir esta necesidad, el servicio de enrutamiento proporciona una implementación de IExtension<T>, el RoutingExtension, que permite la actualización dinámica de la configuración del servicio de enrutamiento en tiempo de ejecución.
Para obtener más información sobre la configuración dinámica del servicio de enrutamiento, vea Introducción al enrutamiento.
Puenteo de protocolos
Uno de los desafíos de los escenarios intermedios es que los puntos de conexión internos pueden tener requisitos de transporte o versión SOAP diferentes a los del punto de conexión en el que se reciben los mensajes. Para admitir este escenario, el servicio de enrutamiento puede acortar los protocolos, incluido el procesamiento del mensaje de SOAP a MessageVersion requerido por los extremos de destino. De este modo, se puede usar un protocolo para la comunicación interna, mientras que otro se puede usar para la comunicación externa.
Para admitir el enrutamiento de mensajes entre puntos de conexión con diferentes transportes, el servicio de enrutamiento usa enlaces proporcionados por el sistema que permiten al servicio puentear protocolos diferentes. Esto se produce automáticamente cuando el punto de conexión de servicio expuesto por el servicio de enrutamiento usa un protocolo diferente al de los puntos de conexión de cliente a los que se enrutan los mensajes.
Procesamiento SOAP
Un requisito de enrutamiento común es la capacidad de enrutar mensajes entre puntos de conexión con requisitos SOAP diferentes. Para admitir este requisito, el servicio de enrutamiento proporciona un SoapProcessingBehavior que crea automáticamente una nueva messageVersion que cumple los requisitos del punto de conexión de destino antes de que el mensaje se enrute a él. Este comportamiento también crea un messageVersion nuevo para cualquier mensaje de respuesta antes de devolverlo a la aplicación cliente solicitante, para asegurarse de que MessageVersion de la respuesta coincide con el de la solicitud original.
Para obtener más información sobre el procesamiento SOAP, vea Introducción al enrutamiento.
Tratamiento de errores
En un sistema compuesto por servicios distribuidos que dependen de las comunicaciones de red, es importante asegurarse de que las comunicaciones dentro del sistema son resistentes a errores transitorios de red. El servicio de enrutamiento implementa el manejo de errores que le permite gestionar muchos escenarios de fallos de comunicación que de otro modo podrían resultar en una interrupción del servicio.
Si el servicio de enrutamiento encuentra un CommunicationException al intentar enviar un mensaje, se realizará el control de errores. Estas excepciones suelen indicar que se encontró un problema al intentar comunicarse con el punto de conexión de cliente definido, como , EndpointNotFoundExceptionServerTooBusyExceptiono CommunicationObjectFaultedException. El código de control de errores también detectará e intentará reintentar el envío cuando se produzca una excepción TimeoutException , que es otra excepción común que no se deriva de CommunicationException.
Para obtener más información sobre el control de errores, consulte Introducción al enrutamiento.
puntos de conexión de reserva
Además de los puntos de conexión de cliente de destino asociados a cada definición de filtro de la tabla de filtros, también puede crear una lista de puntos de conexión de copia de seguridad a los que se enrutará el mensaje en caso de un error de transmisión. Si se produce un error y se define una lista de copia de seguridad para la entrada de filtro, el servicio de enrutamiento intentará enviar el mensaje al primer punto de conexión definido en la lista. Si se produce un error en este intento de transmisión, el servicio probará el siguiente punto de conexión y continuará este proceso hasta que el intento de transmisión tenga éxito, devuelva un error no relacionado con la transmisión o todos los puntos de conexión de la lista de respaldo hayan devuelto un error de transmisión.
Para obtener más información sobre los puntos de conexión de copia de seguridad, consulte Introducción al enrutamiento y Filtros de mensajes.
Transmisión en línea
El servicio de enrutamiento puede transmitir mensajes correctamente si establece el enlace para admitir el streaming. Sin embargo, hay algunas condiciones en las que es posible que los mensajes deban almacenarse en búfer:
Multidifusión (búfer para crear copias de mensajes adicionales)
Conmutación por error (usa el búfer en el caso de que sea necesario enviar el mensaje a una reserva)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly es false (usa el búfer para presentar MessageFilterTable con un MessageBuffer de modo que los filtros pueden inspeccionar el cuerpo)
Configuración dinámica