Routage des messages des ponts vers les destinations dans le projet BizTalk Service

Mis à jour: août 2015

Routez des messages d'un composant vers un autre à l'aide de conditions de routage.

L'une des raisons les plus évidentes pour connecter plusieurs composants d'un projet de service BizTalk est de router les messages d'un ordinateur vers un autre. Il y a cependant une autre condition : vous pourriez avoir besoin de router le message à partir d'un composant source vers plusieurs composants de destination selon votre logique métier. Il s'agit de la « condition de routage ». Lorsqu'il existe plusieurs conditions de routage, vous devez également définir l'ordre dans lequel elles sont respectées. Enfin, certaines actions (comme l'attribution de valeurs aux en-têtes de message, l'ajout d'en-têtes personnalisés, etc.) peuvent être réalisées sur le message avant de le router vers sa destination. Cette rubrique décrit ces aspects en détail et fournit également des instructions sur leur réalisation dans un projet de service BizTalk.

Cette rubrique explique ces étapes à l'aide d'un exemple de scénario. Imaginons qu'un message XML au format suivant doive être traité à l'aide d'un pont unidirectionnel 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 logique métier veut que, si les paiements se font par carte bancaire, le message doit être redirigé vers un service externe unidirectionnel. Si le paiement se fait en espèces, le message doit être redirigé vers un point de terminaison de relais unidirectionnel. Si le mode de paiement ne correspond à aucun des deux précédents, il doit être redirigé vers une file d'attente Service Bus.

Cette étape est simple et rapide. Vous devez définir la destination de routage vers laquelle sera redirigé le message après avoir été traité par le pont. Il existe certaines conditions selon les destinations de routages possibles d'un message provenant d'un pont unidirectionnel XML ou d'un Pont demande-réponse XML. Pour plus d'informations sur ces considérations, consultez les rubriques Constraints on Using an XML One-Way Bridge et Constraints on Using an XML Request Reply Bridge.

La procédure suivante décrit la manière de connecter deux composants à un flux de message.

  1. Créez un projet de service BizTalk, comme indiqué dans Prise en main d'un projet Visual Studio.

  2. Ajoutez des composants au projet de service BizTalk, comme décrit dans plusieurs rubriques de Création de points de terminaison de messagerie enrichis sur Azure.

  3. Dans la Boîte à outils, dans la catégorie Ponts, sélectionnez Connecteur.

  4. Positionnez le pointeur de la souris sur l'extrémité droite du composant (représentée par un point rouge lorsque vous déplacez le curseur sur le composant) qui fait office de source du message. Le pointeur de la souris change pour afficher un petit signe « S », ce qui signifie que ce composant ajoute la source du message. Cliquez et maintenez le bouton de la souris enfoncé sur le point, faites glisser celui-ci vers l'extrémité gauche du composant cible (le curseur change à nouveau, affichant un petit « T » représentant la cible), puis relâchez le bouton de la souris. Les deux composants sont maintenant connectés. Remarque : vous pouvez connecter un composant source avec plusieurs composants cibles.

    noteRemarque
    Pour cette étape, un flux de message droit toujours commencer par un pont unidirectionnel XML ou un Pont demande-réponse XML. Par la suite, vous pouvez rediriger les messages vers n'importe quel composant, du moment que vous respectez les contraintes. Ces contraintes sont répertoriées dans Constraints on Using an XML One-Way Bridge et Constraints on Using an XML Request Reply Bridge.

    En suivant le scénario d'exemple, vous devez connecter le pont unidirectionnel XML à un service externe unidirectionnel, un point de terminaison unidirectionnel et une file d'attente Service Bus.

Hormis la connexion entre deux composants, l'autre aspect important du routage est de rediriger le message d'un composant source vers plusieurs composants de destination, selon votre logique métier.

En suivant le scénario d'exemple expliqué plus haut, les conditions de routage doivent se baser sur le mode de paiement, qui est représenté par l'élément PaymentMode dans le message XML. Pour implémenter cette logique métier dans un projet de service BizTalk, nous devons créer des filtres de routage pour chaque condition. La procédure suivante décrit la marche à suivre.

noteRemarque
Avant de commencer à créer des filtres, assurez-vous d'avoir créé les trois connecteurs (comme décrit dans la procédure précédente). Vous devez également avoir créé une propriété (par exemple :PaymentMode) à l'étape Enrichissement d'un pont pour extraire la valeur d'un élément PaymentMode dans le message XML.

La procédure qui suit décrit la manière de définir les conditions de routage dans un projet de service BizTalk.

  1. Cliquez avec le bouton droit pour rediriger un connecteur entre un pont unidirectionnel XML et le service externe unidirectionnel, puis cliquez sur Propriétés. Dans le volet Propriétés, pour la propriété Condition de filtrage, cliquez sur le bouton de sélection (…) pour ouvrir la boîte de dialogue Configuration du filtre de routage.

  2. Dans la boîte de dialogue, sélectionnez l'option Filtrer, puis spécifiez la chaîne de filtrage suivante :

    PaymentMode='credit_card'
    
    noteRemarque
    Vous devez utiliser la syntaxe SQL 92 standard pour filtrer les expressions.

    Notez que PaymentMode est la propriété que vous devez avoir spécifiée pour l'extraction lors de l'étape d'enrichissement. Cette condition de filtrage (entrée sur le connecteur entre le pont unidirectionnel XML et le service externe unidirectionnel) indique que le message est envoyé au service externe unidirectionnel, si la condition est remplie.

    Cliquez sur OK pour enregistrer les modifications et quitter.

  3. De même, pour le connecteur entre le pont unidirectionnel XML et le point de terminaison de relais unidirectionnel, entrez la chaîne de filtrage comme suit :

    PaymentMode='cash'
    
  4. Si la méthode de paiement n'est ni espèce ni carte bancaire, le message doit être redirigé vers une file d'attente Service Bus. Pour appliquer ceci dans votre flux de message, pour le connecteur entre le pont unidirectionnel XML et la file d'attente Service Bus, vous devez ouvrir la boîte de dialogue Configuration du filtre de routage, puis sélectionner Match All. Cette option spécifie que, si aucune des conditions du filtre n'est remplie, la condition du filtre est respectée, et le message est routé vers une file d'attente Service Bus.

Dans la section précédente, nous avons défini les filtres des connecteurs de routage afin que les messages appropriés soient redirigés vers les composants correspondants d'un flux de message. Toutefois, l'ordre de routage est tout aussi important. Par exemple, si l'on revient au scénario évoqué plus haut, quand un message ayant une propriété PaymentMode définie sur credit_card est routé vers la condition de filtre définie sur Match All, ce message est routé vers une file d'attente Service Bus plutôt que vers un point de terminaison de service externe unidirectionnel. Selon votre logique métier, la condition Match All devrait donc être respectée en dernier. Pour ce faire, vous pouvez définir l'ordre dans lequel les conditions de filtre doivent être respectées.

  1. Cliquez avec le bouton droit sur le Pont XML (pont unidirectionnel XML ou Pont demande-réponse XML) puis sélectionnez Properties. Dans le volet Propriétés, cliquez sur le bouton de sélection (…) en regard de la propriété Tableau d'ordre de routage.

  2. La boîte de dialogue Tableau d'ordre de routage affiche l'ordre de respect par défaut des filtres de routage. L'ordre par défaut est l'ordre dans lequel vous avez créé les connecteurs de routage. Pour les réorganiser, sélectionnez un filtre de routage, puis utilisez les boutons haut et bas pour changer l'ordre. Répétez cette étape pour tous les filtres jusqu'à obtenir l'ordre de routage souhaité.

  3. Cliquez sur OK pour enregistrer les modifications et quitter.

Vous pourriez vouloir ajouter des en-têtes de message personnalisés ou attribuer des valeurs aux en-têtes standard avant d'expédier des messages vers les récepteurs. C'est possible grâce à l'action de routage. Pour plus d'informations, consultez Route Action.

Pour continuer avec le même exemple, supposons que le message doit être envoyé vers un service externe unidirectionnel avec un en-tête SOAP personnalisé (CustomerName) et une valeur.

  1. Cliquez avec le bouton droit sur le connecteur de routage entre le pont et le service externe unidirectionnel, puis sélectionnez Propriétés. Dans le volet Propriétés, pour la propriété Action de routage, cliquez sur le bouton de sélection (…) pour ouvrir la boîte de dialogue Actions de routage.

  2. Dans la boîte de dialogue Actions de routage, cliquez sur Ajouter pour ouvrir la boîte de dialogue Ajouter une action de routage. Dans la boîte de dialogue Ajouter une action de routage, procédez comme suit :

     

    Section Nom du champ Description

    Propriété (pour la lecture)

    Nom de la propriété

    Répertorie toutes les propriétés ayant été définies dans les deux précédentes étapes d'enrichissement du Pont demande-réponse XML. Lorsque vous sélectionnez une propriété ici, vous spécifiez que sa valeur doit être attribuée à l'en-tête de message correspondant dans le message sortant.

    Expression

    Utilisez cette option pour fournir une expression dont la valeur est transmise à l'en-tête correspondant du message sortant. Vous pouvez également utiliser cette option pour entrer une valeur constante attribuée à l'en-tête de message. Voici quelques exemples d'expressions :

    • P1 + P2, où P1 et P2 sont deux propriétés prédéfinies dans une version antérieure des étapes d'enrichissement.

    • « Fabrikam », est une constante de chaîne

      ImportantImportant
      Vous devez toujours entrer la valeur d'une expression entre guillemets simples.

    ImportantImportant
    Vous pouvez soit choisir l'option Nom de la propriété ou l'option Expression. Ces options sont mutuellement exclusives.

    Destination (pour l'écriture)

    Type

    Spécifiez le type du message sortant, dont l'en-tête recevra la valeur entrée auparavant.

    Selon la destination du message, les valeurs disponibles dans la liste déroulante peuvent varier.

    • Si vous routez vers un service externe ou un point de terminaison de relais (uni- ou bi- directionnel), les valeurs disponibles dans la liste déroulante sont SOAP et HTTP.

    • Si vous routez vers une file d'attente ou une rubrique, les valeurs disponibles dans la liste déroulante sont SOAP et Explicite.

    • Si vous routez vers une destination FTP, la valeur disponible dans la liste déroulante est FTP.

    • Si vous routez vers une destination SFTP, la valeur disponible dans la liste déroulante est SFTP.

    • Si vous routez vers un objet blob Azure, la valeur disponible dans la liste déroulante est Objet blob Azure.

    Espace de noms d'en-tête SOAP (uniquement si le Type est défini sur SOAP)

    Entrez l'espace de noms de l'en-tête personnalisé SOAP auquel la valeur est attribuée.

    ImportantImportant
    Ce champ est grisé si vous sélectionnez un en-tête standard dans la liste déroulante Identificateur. Vous devez entrer un espace de noms uniquement pour les en-têtes personnalisés SOAP.

    Ce champ est également grisé si l'option Type est définie sur HTTP ou Réparti.

    Identificateur

    Spécifiez le nom de la propriété d'en-tête de message à laquelle la valeur est attribuée.

    Vous pouvez également entrer ici des en-têtes personnalisés. Pour un type de message SOAP, la liste déroulante répertorie les quatre identificateurs standard. Pour un type de message HTTP, compte tenu du grand nombre d'en-têtes standards, aucun ne figure dans la liste déroulante. Pour les types de messages HTTP et SOAP, vous pouvez répertorier un en-tête personnalisé dont la valeur doit être attribuée à une autre propriété.

    Pour les autres types de destinations comme FTP, SFTP et les objets blob Azure, vous pouvez sélectionner les en-têtes de message dans lesquels la valeur de propriété doit être écrite.

    En prenant toujours le même exemple, vous devez définir l'option CustomerName, car il s'agit du nom de l'en-tête personnalisé à inclure dans le message sortant.

  3. Cliquez sur OK dans la boîte de dialogue Ajouter une action de routage. Les boîtes de dialogue devraient maintenant se présenter comme ceci :

    Actions de routage

    Que signifie cette boîte de dialogue ? Elle indique que le pont utilisera la propriété de valeur P1 (déjà prédéfinie lors des étapes d'enrichissement antérieures) et l'attribuera à l'en-tête personnalisé SOAP CustomerName avec l'espace de noms http://schemas.microsoft.com/integration/promotedpropertiesinfo, puis l'enverra au récepteur du message.

    ImportantImportant
    Si vous créez deux actions de routage sur le même connecteur pointant vers la même destination mais utilisant deux propriétés différentes, par exemple P1 et P2, vous n'obtiendrez pas d'erreur de build. La dernière action de routage remplace les actions précédemment définies. Dans cet exemple, c'est l'action de routage pour la propriété P2 est respectée.

  4. Pour mettre à jour ou supprimer une action de routage, vous pouvez la sélectionner dans la boîte de dialogue, puis cliquer sur Modifier ou Supprimer. Cliquez sur OK dans la boîte de dialogue Actions de routage, puis sur Enregistrer pour enregistrer les modifications apportées au Configuration de pont.

Voir aussi

Afficher: