Encaminhar Mensagens de Pontes a Destinos no Projeto de Serviços BizTalk

Atualizado: agosto de 2015

Roteie as mensagens de um componente para outro usando condições de roteamento.

Uma das razões óbvias para conectar vários componentes de um Projeto do Serviço BizTalk é rotear a mensagem desde um componente para outro. Mas há um outro requerimento - é possível que você precise rotear a mensagem desde um componente de origem para mais de um componente de destino baseado na lógica da sua empresa, a qual também pode ser denominada como a condição de roteamento. Quando há mais de uma condição de roteamento, você também precisa definir a ordem na qual as condições de roteamento são respeitadas. E finalmente, pode haver algumas ações (como designar valores para cabeçalhos de mensagens, adicionar cabeçalhos personalizados de mensagens, etc.) que você realiza na mensagem antes que ela finalmente seja roteada para o destino. Este tópico discute estes aspectos em detalhe e também fornece instruções de como conseguir isto num Projeto do Serviço BizTalk.

Este tópico explica essas etapas usando um cenário de exemplo. Presuma que uma mensagem XML no seguinte formato tenha de ser processada usando uma Ponte unidirecional 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>

A lógica da empresa é tal que se o modo de pagamento é um cartão de crédito, a mensagem deve ser roteada para um serviço externo unidirecional; se o modo é em dinheiro, a mensagem deve ser roteada para um ponto de extremidade de retransmissão unidirecional; e se o modo é nenhum deles, deve ser roteado para uma fila do Barramento do Serviço.

Isto é bastante direto. Você deve definir a rota de destino onde a mensagem de entrada é roteada depois de ser processada pela ponte. Há algumas considerações relativamente a onde pode ser roteada uma mensagem de um Ponte unidirecional XML ou um Ponte de solicitação-resposta XML. Para obter mais informações sobre essas considerações, consulte Constraints on Using an XML One-Way Bridge e Constraints on Using an XML Request Reply Bridge.

O seguinte procedimento descreve como conectar dois componentes de um fluxo de mensagem.

  1. Crie um Projeto do Serviço BizTalk, conforme descrito em Introdução ao projeto do Visual Studio.

  2. Adicione componentes ao Projeto do Serviço BizTalk, como descrito em vários tópicos em Criar pontos de extremidade de mensagens avançadas no Azure.

  3. Selecione Conector na categoria Pontes na Caixa de Ferramentas.

  4. Pegue o ponteiro do mouse no extremo direito do componente (marcado por um ponto vermelho quando você move o cursor sobre o componente) que atua como a origem da mensagem. O ponteiro do mouse muda para mostrar um pequeno sinal de “S”, denotando que este componente é adicionado à origem da mensagem. Clique e mantenha o botão do mouse no ponto, arraste-o para o extremo esquerdo do componente de destino (neste ponto, o cursor muda de novo para mostrar um pequeno “T” denotando o destino) e solte o botão do mouse. Os dois componentes agora estão conectados. Note que você pode conectar um componente de origem a mais de um componente de destino.

    noteObservação
    Para o marco atual, um fluxo de mensagem sempre deve começar com Ponte unidirecional XML ou um Ponte de solicitação-resposta XML. Depois disso, você pode rotear a mensagem para qualquer componente, enquanto você se adere às restrições. As restrições estão listadas em Constraints on Using an XML One-Way Bridge e Constraints on Using an XML Request Reply Bridge.

    Indo pelo cenário de exemplo, você deve conectar o Ponte unidirecional XML para um serviço externo unidirecional, um ponto de extremidade de retransmissão unidirecional e uma fila Barramento do Serviço.

Aparte de conectar dois componentes, o outro aspecto importante do roteamento é rotear a mensagem desde um componente de origem para mais de um componente de destino baseado na lógica da sua empresa.

Usando o cenário exemplo explicado anteriormente, a condição de roteamento deve estar baseada no modo de pagamento, que é denotado pelo elemento PaymentMode na mensagem XML. Para implementar esta lógica da empresa no Projeto do Serviço BizTalk, precisamos criar filtros de roteamento para cada condição. O seguinte procedimento descreve como fazer isso.

noteObservação
Antes de começar a criar filtros, verifique se criou todos os três Conectores (conforme descrito no procedimento anterior). Além disso, você deve ter criado uma propriedade (por exemplo, PaymentMode) no estágio de otimização de uma ponte para extrair o valor do elemento PaymentMode na mensagem XML.

O procedimento seguinte descreve como definir as condições de roteamento num Projeto do Serviço BizTalk.

  1. Clique o botão direito no conector do roteamento entre o Ponte unidirecional XML e o serviço externo unidirecional e, em seguida, clique em Propriedades. No painel de Propriedades, para a propriedade Condição de Filtro, clique o botão de elipse (...) para abrir a caixa de diálogo Configuração do Filtro de Roteamento.

  2. Na caixa de diálogo, selecione a opção Filtro e, em seguida, especifique a seguinte cadeia de caracteres de filtro:

    PaymentMode='credit_card'
    
    noteObservação
    Você deve usar sintaxe SQL 92 padrão para as expressões do filtro.

    Note que o PaymentMode é a propriedade que você deve ter inserido para extração no estágio Enriquecer e esta condição de filtro (que é inserida no conector entre a Ponte unidirecional XML e o serviço externo unidirecional) especifica que a mensagem será enviada para um serviço externo unidirecional, se esta condição de filtro for satisfeita.

    Clique em OK para salvar as alterações e sair.

  3. De forma semelhante, para o conector entre oaPonte unidirecional XML e o ponto de extremidade de retransmissão unidirecional, insira a cadeia de caracteres como:

    PaymentMode='cash'
    
  4. Se o modo do pagamento não for em dinheiro nem cartão de crédito, a mensagem deve ser roteada para uma fila Barramento do Serviço. Para conseguir isso no seu fluxo de mensagem, para o conector entre o Ponte unidirecional XML e a fila Barramento do Serviço, você deve abrir a caixa de diálogo Configuração de Filtro de Roteamento e, em seguida, selecionar Corresponder Tudo. Isto especifica que, se nenhuma das condições do filtro corresponder, esta condição de filtro é respeitada e a mensagem é roteada para uma fila Barramento do Serviço.

Nas seções prévias definimos os filtros nos conectores de roteamento para assegurar que as mensagens certas eram roteadas nos componentes certos do fluxo de mensagem. No entanto, a ordem de roteamento é igualmente importante. Por exemplo, tomando o cenário que discutimos anteriormente, se uma mensagem que tem o PaymentMode definido como credit_card for roteada para a condição de filtro que tem o Corresponder Tudo definido, ela é roteada para uma fila de Barramento do Serviço em vez de um ponto de extremidade de serviço externo unidirecional. Então, de acordo com a lógica da empresa, a condição Corresponder Tudo deveria ser respeitada por último. Você pode fazer isso definindo a ordem na qual as condições de filtragem devem ser respeitadas.

  1. Clique com o botão direito na Ponte XML(Ponte unidirecional XML ou Ponte de solicitação-resposta XML) e selecione Propriedades. No painel de Propriedades, clique no botão da elipse (...) em relação à propriedade Tabela de Ordem de Roteamento.

  2. A caixa de diálogo de Tabela de Ordem de Rota exibe a ordem padrão para respeitar os filtros de rota. Esta ordem padrão é a ordem na qual você cria os conectores do roteamento. Para reordenar filtros de rota, selecione um filtro de rota e, em seguida, use as setas para cima e para abaixo para os organizar pela ordem correta. Deve repetir esta etapa para todos os filtros de rota até que você tenha a ordem de rota correta que pretende.

  3. Clique em OK para salvar as alterações e sair.

Você pode querer adicionar alguns cabeçalhos de mensagem personalizados ou designar valores para cabeçalhos de mensagem padrão antes de enviar a mensagem para o receptor da mensagem. Você pode fazer isso usando uma ação da Rota. Para obter mais informações, consulte Route Action.

Para continuar com o exemplo usado anteriormente, assuma que a mensagem tem que ser enviada para um serviço externo unidirecional com um cabeçalho SOAP personalizado (CustomerName) e um valor.

  1. Clique o botão direito no conector do roteamento entre a ponte e o serviço externo unidirecional e, em seguida, clique em Propriedades. No painel de Propriedades, para a propriedade Ação de Roteamento, clique o botão de elipse (...) para abrir a caixa de diálogo Ações de Roteamento.

  2. Na caixa de diálogo Ações de Rota, clique em Adicionar para abrir a caixa de diálogo Adicionar Ação de Rota. Na caixa de diálogo Adicionar Ação de Rota, faça o seguinte:

     

    Seção Nome do Campo Descrição

    Propriedade (Ler De)

    Nome da propriedade

    Lista todas as propriedades que foram definidas nos anteriores dois estágios Enriquecer no Ponte de solicitação-resposta XML. Quando você seleciona uma propriedade aqui, você especifica que um valor da propriedade selecionada deve ser designado ao cabeçalho da mensagem relevante da mensagem de saída.

    Expressão

    Use esta opção para fornecer uma expressão, cujo valor resultante é passado no cabeçalho da mensagem relevante da mensagem de saída. Você pode também usar esta opção para inserir um valor constante que é designado para um cabeçalho de mensagem. Algumas expressões de exemplo são:

    • P1 + P2, onde P1 e P2 são duas propriedades que já foram definidas em qualquer dos dois estágios Enriquecer anteriores

    • "Fabrikam", é uma restrição da cadeia de caracteres

      ImportantImportante
      Você sempre deverá inserir o valor de uma expressão entre aspas simples.

    ImportantImportante
    Você pode escolher a opção Nome de Propriedade ou a opção Expressão. Estas opções são mutualmente exclusivas.

    Destino (Gravar Em)

    Tipo

    Insira o tipo da mensagem de saída, cujo cabeçalho seria designado ao valor que você inseriu anteriormente.

    Dependendo do destino da mensagem, os valores disponíveis na lista suspensa mudam.

    • Se você está roteando um serviço externo ou um ponto de extremidade de retransmissão (unidirecional ou bidirecional), os valores disponíveis da lista suspensa são SOAP e HTTP.

    • Se você está roteando para uma fila ou um tópico, os valores disponíveis da lista suspensa são SOAP e Brokered.

    • Se você está roteando para um destino FTP, o valor disponível da lista suspensa é FTP.

    • Se você está roteando para um destino SFTP, o valor disponível da lista suspensa é SFTP.

    • Se você está roteando para um blob do Azure, o valor disponível da lista suspensa é Blob do Azure.

    O namespace do cabeçalho SOAP (somente se o Tipo for definido como SOAP)

    Especifica o namespace do cabeçalho SOAP personalizado para o qual o valor é atribuído.

    ImportantImportante
    Este campo fica acinzentado se você selecionar um cabeçalho padrão na lista suspensa Identificador. Você tem de inserir um namespace somente para cabeçalhos SOAP personalizados.

    Este campo fica bloqueado também se o Tipo estiver definido como HTTP ou Orientado.

    Identificador

    Insira o nome da propriedade do cabeçalho da mensagem ao qual é atribuído o valor.

    É possível também inserir cabeçalhos personalizados aqui. Para tipos de mensagem SOAP, a lista suspensa mostra quatro identificadores padrão. Para tipos de mensagem HTTP, porque há uma lista enorme de cabeçalhos padrão, a lista suspensa não mostra nenhum cabeçalho. Para tipos de mensagens SOAP e HTTP, você também pode listar um cabeçalho personalizado cujo valor você deseja atribuir a outra propriedade.

    Para outro tipo de destino como FTP, SFTP e blobs do Azure, você pode selecionar os cabeçalhos de mensagem nos quais o valor da propriedade deverá ser gravado.

    Continuando com o exemplo que tomamos anteriormente, você deve definir isto para CustomerName porque esse é o nome do cabeçalho personalizado que você deve incluir na mensagem de saída.

  3. Clique em OK na caixa de diálogo Adicionar Ação de Rota. As caixas de diálogo agora devem parecer assim:

    Rotear ações

    Então, o que essa caixa de diálogo representa? Significa que a ponte usará o valor da propriedade P1 (já definida num dos estágios Enriquecer prévios) e designá-lo para o cabeçalho SOAP personalizado, o CustomerName com namespace http://schemas.microsoft.com/integration/promotedpropertiesinfo e, em seguida, enviá-lo para o receptor da mensagem.

    ImportantImportante
    Se você criou duas ações de rota no mesmo conector de roteamento que aponte para o mesmo destino usando duas propriedades diferentes, por exemplo P1 e P2, você não obtêm um erro de compilação. A última ação de rota anula as ações de rota definidas anteriormente. Neste exemplo, a ação de rota para a propriedade P2 é respeitada.

  4. Para atualizar ou remover uma ação de rota, você pode selecioná-la na caixa de diálogo e clicar em Editar ou Remover respectivamente Clique em OK na caixa de diálogo Ações de rota e clique em Salvar para salvar alterações em um Configuração da ponte.

Consulte também

Mostrar: