Enrutamiento de mensajes de puentes a destinos en el proyecto de Servicios de BizTalk

Actualizado: agosto de 2015

Enrute los mensajes de un componente a otro utilizando las condiciones de enrutamiento.

Uno de los motivos obvios para la conexión de varios componentes de un Proyecto de servicio de BizTalk es para enrutar el mensaje de un componente a otro. Existe otro requisito, ya que es posible que necesite enrutar el mensaje de un componente de origen a más de un componente de destino en función de la lógica de su negocio, a lo que también se le puede denominar condición de enrutamiento. Cuando existe más de una condición de enrutamiento, también necesita establecer el orden en el que respetar las condiciones de enrutamiento. Y, finalmente, puede haber algunas acciones (como la asignación de valores a encabezados de mensaje, la adición de encabezados personalizados, etc.) que se llevan a cabo en el mensaje antes de que se envíe al destino. En este tema se tratan estos aspectos de manera detallada y también se proporcionan instrucciones sobre cómo realizarlas en un Proyecto de servicio de BizTalk.

Este tema se explican estos pasos con un escenario de ejemplo. Supongamos que se debe procesar un mensaje XML en el siguiente formato mediante un Puente unidireccional XML:

<PaymentHistory xmlns:ns0="http://Integration.PipelineChaining">
  <BaseData>
    <Amount>10.4</Amount> 
    <CurrencyCode>CurrencyCode_0</CurrencyCode> 
    <EntryDate>1999-05-31</EntryDate> 
    <EntryTime>13:20:00.000-05:00</EntryTime> 
    <PaymentMode>Mode_0</PaymentMode> 
    <StatusCode>StatusCode_0</StatusCode> 
    <PurposeCode>PurposeCode_0</PurposeCode> 
  </BaseData>
</PaymentHistory>

La lógica de negocio es tal que si el modo de pago es una tarjeta de crédito, el mensaje deberá enrutarse a un servicio externo unidireccional; si el modo es en efectivo, el mensaje deberá enrutarse a un extremo de retransmisión unidireccional, y si el modo no es ninguno de estos, deberá enrutarse a una cola de CmdLets.

Esto resulta bastante sencillo. Debe definir el destino de la ruta al que se enruta el mensaje entrante tras ser procesado por el puente. Existen algunas consideraciones relacionadas con respecto a dónde se puede enrutar un mensaje procedente de un Puente unidireccional XML o un Puente de solicitud y respuesta XML. Para obtener más información sobre estas consideraciones, consulte Constraints on Using an XML One-Way Bridge y Constraints on Using an XML Request Reply Bridge.

En el siguiente procedimiento se describe cómo conectar dos componentes de un flujo de mensajes.

  1. Cree un Proyecto de servicio de BizTalk, como se describe en Introducción a un proyecto de Visual Studio.

  2. Agregue componentes al Proyecto de servicio de BizTalk, tal y como se describe en los distintos temas de Crear extremos de mensajería enriquecida en Azure.

  3. Seleccione Conector en la categoría Puentes en el Cuadro de herramientas.

  4. Dirija el puntero del mouse al extremo derecho del componente (que aparece marcado mediante un punto rojo cuando se mueve el cursor sobre el componente) que actúa como el origen del mensaje. El puntero del mouse cambiará para mostrar un signo "S" pequeño que indica que este componente agrega el origen del mensaje. Mantenga presionado el mouse en el punto, arrástrelo hacia el extremo izquierdo del componente de destino (en este punto el cursor cambia de nuevo para mostrar una "T" pequeña que hará referencia al destino) y, a continuación, suelte el mouse. Los dos componentes están ahora conectados. Tenga en cuenta que puede conectar un componente de origen a más de un componente de destino.

    noteNota
    Para el hito actual, el flujo de mensajes debe comenzar siempre por un Puente unidireccional XML o un Puente de solicitud y respuesta XML. Tras eso, puede enrutar el mensaje a cualquier componente siempre que respete las restricciones. Las restricciones se enumeran en Constraints on Using an XML One-Way Bridge y en Constraints on Using an XML Request Reply Bridge.

    Según el escenario de ejemplo, debe conectar el Puente unidireccional XML a un servicio externo unidireccional, a un extremo de retransmisión unidireccional y a una cola de CmdLets.

Aparte de conectar dos componentes, el otro aspecto importante del enrutamiento es enrutar el mensaje de un componente de origen a más de un componente de destino en función de la lógica de su negocio.

Según el escenario de ejemplo explicado anteriormente, la condición del enrutamiento debe basarse en el modo de pago, que viene indicado por el elemento PaymentMode del mensaje XML. Para implementar esta lógica de negocio en un Proyecto de servicio de BizTalk, es necesario crear filtros de enrutamiento para cada condición. En el siguiente procedimiento se describe cómo hacerlo.

noteNota
Antes de empezar a crear filtros, asegúrese de crear los tres conectores (tal y como se describe en el procedimiento anterior). Además, es necesario crear una propiedad (por ejemplo: PaymentMode) en la fase Enriquecer de un puente para extraer el valor del elemento PaymentMode en el mensaje XML.

En el siguiente procedimiento se describe cómo establecer las condiciones del enrutamiento de un Proyecto de servicio de BizTalk.

  1. Haz clic con el botón secundario en el conector de enrutamiento situado entre Puente unidireccional XML y el servicio externo unidireccional y, después, haga clic en Propiedades. En el panel Propiedades, para la propiedad Condición de filtro, haga clic en el botón de puntos suspensivos (…) para abrir el cuadro de diálogo Configuración de filtro de enrutamiento.

  2. En el cuadro de diálogo, seleccione la opción Filtro y, a continuación, escriba la siguiente cadena de filtro:

    PaymentMode='credit_card'
    
    noteNota
    Debe usar la sintaxis SQL 92 estándar para las expresiones del filtro.

    Tenga en cuenta que PaymentMode es la propiedad que tiene que especificar para que se extraiga durante la fase Enriquecer y que esta condición de filtro (que se especifica en el conector existente entre el Puente unidireccional XML y el servicio externo unidireccional) especifica que el mensaje se enviará al servicio externo unidireccional, en caso de que se cumpla esta condición del filtro.

    Haga clic en Aceptar para guardar los cambios y salir.

  3. De manera similar, para el conector existente entre el Puente unidireccional XML y el extremo de retransmisión unidireccional, especifique la cadena de filtro como:

    PaymentMode='cash'
    
  4. Si el modo de pago no es en efectivo ni una tarjeta de crédito, el mensaje deberá enrutarse a una cola de CmdLets. Para conseguir esto en su flujo de mensajes, para el conector situado entre la cola del Puente unidireccional XML y CmdLets, debe abrir el cuadro de diálogo Configuración de filtro de enrutamiento y, a continuación, seleccionar Coincidir con todo. Esto especifica que si no coincide ninguna de las condiciones de filtrado, se respeta esta condición de filtro y el mensaje se enruta a una cola de CmdLets.

En la sección anterior hemos establecido los filtros en los conectores de enrutamiento para garantizar el enrutamiento de los mensajes adecuados a los componentes adecuados de un flujo de mensajes. Sin embargo, el orden del enrutamiento es igual de importante. Por ejemplo, según el escenario expuesto anteriormente, si se enruta un mensaje que tiene PaymentMode establecido en credit_card a la condición de filtrado que tiene Coincidir con todo establecido, se enruta a una cola de CmdLets en vez de al extremo de servicio externo unidireccional. De este modo, de acuerdo con la lógica de negocio, la condición Coincidir con todo debe respetarse en último lugar. Puede conseguir esto estableciendo el orden en el que se deben respetar las condiciones de filtrado.

  1. Haga clic con el botón secundario en el Puente XML (Puente unidireccional XML o en el Puente de solicitud y respuesta XML) y seleccione Propiedades. En el panel Propiedades, haga clic en el botón de los puntos suspensivos (…) en la propiedad Tabla de ordenación de ruta.

  2. El cuadro de diálogo Tabla de ordenación de ruta muestra el orden predeterminado en que se deben respetar los filtros de ruta. Este orden predeterminado es el orden en el que creó los conectores de enrutamiento. Para reordenar los filtros de ruta, seleccione un filtro de ruta y, a continuación, utilice los botones de flecha arriba y abajo para colocarlos en el orden correcto. Debe repetir este paso con todos los filtros de ruta hasta conseguir el orden de ruta correcto que desee.

  3. Haga clic en Aceptar para guardar los cambios y salir.

Puede agregar algunos encabezados de mensajes personalizados o asignar valores a encabezados de mensajes estándar antes de enviar el mensaje al receptor. Puede llevar a cabo esta tarea mediante la acción de enrutamiento. Para obtener más información, vea Route Action.

Para continuar con el ejemplo utilizado anteriormente, suponga que el mensaje debe enviarse al servicio externo unidireccional con un encabezado SOAP personalizado (CustomerName) y un valor.

  1. Haga clic con el botón secundario en el conector de enrutamiento situado entre el puente y el servicio externo unidireccional y, después, haga clic en Propiedades. En el panel Propiedades, para la propiedad Acción de enrutamiento, haz clic en el botón de puntos suspensivos (…) para abrir el cuadro de diálogo Acciones de enrutamiento.

  2. En el cuadro de diálogo Acciones de enrutamiento, haga clic en Agregar para abrir el cuadro de diálogo Agregar acción de enrutamiento. En el cuadro de diálogo Agregar acción de enrutamiento, haga lo siguiente:

     

    Sección Nombre de campo Descripción

    Propiedad (leer de)

    Nombre de la propiedad

    Enumera todas las propiedades que se han definido en las dos fases Enriquecer previas del Puente de solicitud y respuesta XML. Al seleccionar una propiedad aquí, se especifica que el valor de la propiedad seleccionada debe asignarse al encabezado de mensaje relevante del mensaje saliente.

    Expresión

    Utilice esta opción para proporcionar una expresión, cuyo valor resultante se pasará al encabezado del mensaje relevante del mensaje saliente. También puede usar esta opción para especificar un valor constante que se asigne a un encabezado de mensaje. Algunas expresiones de ejemplo:

    • P1 + P2, donde P1 y P2 son dos propiedades que ya están definidas en alguna de las dos fases Enriquecer anteriores

    • «Fabrikam», es una constante de cadena

      ImportantImportante
      Siempre debe especificar el valor de una expresión entre comillas simples.

    ImportantImportante
    Puede seleccionar la opción Nombre de la propiedad o la opción Expresión. Estas opciones se excluyen mutuamente.

    Destino (escribir en)

    Tipo

    Especifique el tipo de mensaje saliente, a cuyo encabezado se asignará el valor especificado previamente.

    En función del destino del mensaje, los valores disponibles en el menú desplegable cambiarán.

    • Si desea efectuar el enrutamiento a un servicio externo o a un extremo de retransmisión (unidireccional o bidireccional), los valores disponibles en la lista desplegable serán SOAP y HTTP.

    • Si desea efectuar el enrutamiento a una cola o a un tema, los valores disponibles en la lista desplegable serán SOAP y Brokered.

    • Si desea efectuar el enrutamiento a un destino FTP, el valor disponible en la lista desplegable será FTP.

    • Si desea efectuar el enrutamiento a un destino SFTP, el valor disponible en la lista desplegable será SFTP.

    • Si desea efectuar el enrutamiento a un blob de Azure, el valor disponible en la lista desplegable será Blob de Azure.

    Espacio de nombres del encabezado SOAP (solamente si Tipo se encuentra ajustado en SOAP)

    Escriba el espacio de nombres del encabezado SOAP personalizado al cual se asignará el valor.

    ImportantImportante
    Este campo aparece atenuado si selecciona un encabezado estándar de la lista desplegable Identificador. Es necesario que introduzca un espacio de nombres solamente para los encabezados SOAP personalizados.

    Este campo también está atenuado si Tipo se establece en HTTP o en Intermediación.

    Identificador

    Especifique el nombre de la propiedad de encabezado de mensaje al cual se asigna el valor.

    También puede especificar aquí encabezados personalizados. Para el tipo de mensaje SOAP, el menú desplegable muestra los cuatro identificadores estándar. Para el tipo de mensaje HTTP, debido a que existe una lista enorme de encabezados estándar, el cuadro desplegable no enumera ningún encabezado. Para los tipos de mensaje SOAP y HTTP, puede enumerar un encabezado personalizado cuyo valor desees asignar a otra propiedad.

    Para otros tipos de destino, como FTP, SFTP y blobs de Azure, puede seleccionar los encabezados de los mensajes en los que se debe escribir el valor de la propiedad.

    Teniendo en cuenta el ejemplo tomado anteriormente, debe establecer esto en CustomerName debido a que se trata del nombre de encabezado personalizado que debe incluir en el mensaje saliente.

  3. Haga clic en Aceptar en el cuadro de diálogo Agregar acción de enrutamiento. Ahora los cuadros de diálogo deberían ser similares a los siguientes:

    Enrutar acciones

    ¿Qué se describe en este cuadro de diálogo? Significa que el puente usaría el valor de la propiedad P1 (ya definido en una de las fases Enriquecer anteriores) y lo asignaría al encabezado SOAP personalizado, CustomerName con espacio de nombres http://schemas.microsoft.com/integration/promotedpropertiesinfo y, a continuación, lo enviaría al receptor de mensajes.

    ImportantImportante
    Si crea dos acciones de enrutamiento en el mismo conector de enrutamiento que señalen al mismo destino mediante dos propiedades diferentes, por ejemplo, P1 y P2, no se obtendrá un error de compilación. La última acción de enrutamiento anula las acciones de enrutamiento definidas previamente. En este ejemplo, se respeta la acción de enrutamiento de la propiedad P2.

  4. Para actualizar o eliminar una acción de enrutamiento, puede seleccionarla en el cuadro de diálogo y hacer clic en Editar o Eliminar respectivamente. Haga clic en Aceptar en el cuadro de diálogo Acciones de enrutamiento y, a continuación, haga clic en Guardar para guardar los cambios en un Configuración del puente.

Vea también

Mostrar: