Escenarios de enrutamiento
Aunque el servicio de enrutamiento es altamente personalizable, puede ser un desafío diseñar una lógica de enrutamiento eficaz al crear una nueva configuración desde cero. Sin embargo, hay varios escenarios comunes que siguen la mayoría de las configuraciones del servicio de enrutamiento. Aunque es posible que estos escenarios no se apliquen directamente a su configuración específica, comprender cómo se puede configurar el servicio de enrutamiento para controlar estos escenarios le ayudará a comprender el servicio de enrutamiento.
Escenarios comunes
El uso más básico del servicio de enrutamiento es agregar varios puntos de conexión de destino para reducir el número de puntos de conexión expuestos a las aplicaciones cliente y, a continuación, usar filtros de mensaje para enrutar cada mensaje al destino correcto. Los mensajes se pueden enrutar en función de los requisitos de procesamiento lógico o físico, como un tipo de mensaje que un servicio específico debe procesar o en función de necesidades empresariales arbitrarias, como proporcionar procesamiento prioritario de mensajes desde un origen específico. En la tabla siguiente se enumeran algunos de los escenarios comunes y cuándo se encuentran:
Escenario | Usar cuando |
---|---|
Control de versiones del servicio | Debe admitir varias versiones de un servicio o puede implementar un servicio actualizado en el futuro. |
Creación de particiones de datos de servicio | Debe dividir un servicio entre varios hosts. |
Actualización dinámica | Debe volver a configurar dinámicamente la lógica de enrutamiento en tiempo de ejecución para controlar las implementaciones de servicio cambiantes. |
Multidifusión | Debe enviar un mensaje a varios puntos de conexión. |
Puenteo de protocolos | Recibe mensajes a través de un protocolo de transporte y el punto de conexión de destino usa otro protocolo. |
Control de errores | Debe proporcionar resistencia a interrupciones de red y errores de comunicación. |
Nota
Aunque muchos de los escenarios presentados son específicos de determinadas necesidades empresariales o requisitos de procesamiento, planear la compatibilidad con actualizaciones dinámicas y usar el control de errores a menudo se puede considerar como procedimientos recomendados, ya que permiten modificar la lógica de enrutamiento en tiempo de ejecución y recuperarse de errores transitorios de red y comunicación.
Control de versiones del servicio
Al introducir una nueva versión de un servicio, a menudo debe mantener la versión anterior hasta que todos los clientes hayan pasado al nuevo servicio. Esto es especialmente crítico si el servicio es un proceso de larga duración que tarda días, semanas o incluso meses en completarse. Normalmente, esto requiere implementar una nueva dirección de punto de conexión para el nuevo servicio mientras se mantiene el punto de conexión original para la versión anterior.
Mediante el servicio de enrutamiento, puede exponer un punto de conexión para recibir mensajes de las aplicaciones cliente y, a continuación, enrutar cada mensaje a la versión de servicio correcta en función del contenido del mensaje. La implementación más básica implica agregar un encabezado personalizado al mensaje que indica la versión del servicio que va a procesar el mensaje. El servicio de enrutamiento puede usar XPathMessageFilter para inspeccionar cada mensaje para detectar la presencia del encabezado personalizado y enrutar el mensaje al punto de conexión de destino adecuado.
Para conocer los pasos que se usan para crear una configuración de control de versiones de servicio, consulte How To: Service Versioning.
Particionamiento de datos de servicio
Al diseñar un entorno distribuido, a menudo es conveniente distribuir la carga de procesamiento entre varios equipos para proporcionar alta disponibilidad, reducir la carga de procesamiento en equipos individuales o proporcionar recursos dedicados para un subconjunto específico de mensajes. Aunque el servicio de enrutamiento no reemplaza a una solución de equilibrio de carga dedicada, su capacidad de realizar el enrutamiento basado en contenido se puede usar para enrutar mensajes similares a destinos específicos. Por ejemplo, puede tener un requisito para procesar mensajes de un cliente específico por separado de los mensajes recibidos de otros clientes.
Para conocer los pasos que se usan para crear una configuración de creación de particiones de datos de servicio, consulte How To: Service Data Partitioning.
Enrutamiento dinámico
A menudo, es conveniente modificar la configuración de enrutamiento para satisfacer las necesidades empresariales cambiantes, como agregar una ruta a una versión más reciente de un servicio, cambiar los criterios de enrutamiento o cambiar el punto de conexión de destino un mensaje específico al que el filtro se enruta. El servicio de enrutamiento le permite hacerlo a través de la RoutingExtension, lo que le permite proporcionar una nueva Configuración de Enrutamiento en tiempo de ejecución. La nueva configuración surte efecto inmediatamente, pero solo afecta a las nuevas sesiones procesadas por el servicio de enrutamiento.
Para conocer los pasos que se usan para implementar el enrutamiento dinámico, consulte How To: Dynamic Update.
Multidifusión
Al enrutar mensajes, normalmente se enruta cada mensaje a un punto de conexión de destino específico. Sin embargo, es posible que de vez en cuando necesite enrutar una copia del mensaje a varios puntos de conexión de destino. Para realizar el enrutamiento de multidifusión, las condiciones siguientes deben ser verdaderas:
La forma del canal no debe ser request-reply (aunque puede ser unidireccional o dúplex), ya que la aplicación cliente solo puede recibir una respuesta en respuesta a la solicitud.
Varios filtros deben devolver true al evaluar el mensaje.
Si se cumplen estas condiciones, cada punto de conexión de destino asociado a un filtro que devuelve true recibirá una copia del mensaje.
Puenteo de protocolos
Al enrutar mensajes entre protocolos SOAP diferentes, el servicio de enrutamiento usa LAS API de WCF para convertir el mensaje de un protocolo a otro. Esto ocurre automáticamente cuando los puntos de conexión de servicio expuestos por el servicio de enrutamiento usan un protocolo diferente al de los puntos de conexión de cliente a los que se enrutan los mensajes. Es posible deshabilitar este comportamiento si los protocolos en uso no son estándar; sin embargo, debe proporcionar su propio código de puente.
Control de errores
En un entorno distribuido, no es raro encontrar errores transitorios de red o comunicación. Sin un servicio intermediario, como el servicio de enrutamiento, la carga de controlar estos errores se encuentra en la aplicación cliente. Si la aplicación cliente no incluye lógica específica para reintentar en caso de errores de red o comunicación y conocimientos de ubicaciones alternativas, el usuario puede encontrar escenarios en los que un mensaje se debe enviar varias veces antes de que el servicio de destino lo procese correctamente. Esto puede dar lugar a la insatisfacción del cliente con la aplicación, ya que se puede percibir como poco confiable.
El servicio de enrutamiento intenta solucionar este escenario proporcionando funcionalidades sólidas de control de errores para los mensajes que encuentran errores relacionados con la red o la comunicación. Mediante la creación de una lista de posibles puntos de conexión de destino y la asociación de esta lista con cada filtro de mensaje, se quita el único punto de error producido al tener solo un destino posible. En caso de error, el servicio de enrutamiento intentará entregar el mensaje al siguiente punto de conexión de la lista hasta que se haya entregado el mensaje, se produzca un error de no comunicación o se hayan agotado todos los puntos de conexión.
Para conocer los pasos que se usan para configurar el control de errores, consulte Cómo: Control de errores.
En esta sección
Cómo hacer: Versionado de servicios
Cómo: Particionamiento de datos de servicio
Cómo hacer una actualización dinámica