← Rétro-ingénierie BizTalk

Guide des artefacts BizTalk

Reference rapide pour les developpeurs qui n'ont jamais travaille avec BizTalk Server. Lire ceci avant d'ouvrir tout fichier source BizTalk.

Reference des types de fichiers

Fichiers de projet et de solution

ExtensionNomContenuEquivalent Azure
.slnSolution Visual StudioRegroupe plusieurs projets BizTalkSans objet (remplace par des groupes de ressources Azure distincts par solution)
.btprojProjet BizTalkFichier de projet MSBuild listant tous les artefacts d'une application BizTalkSans objet
.snkCle de nom fortSigne l'assemblage compile — requis pour le deploiement GACSans objet dans Azure

Artefacts BizTalk principaux

ExtensionNomContenuEquivalent Azure
.odxOrchestrationLe « programme » principal — definit le processus metier sous forme d'organigramme. Contient : formes de reception/envoi, formes de decision, boucles, branches paralleles, gestionnaires d'exceptions, ensembles de correlation. Compile en classe C#.Azure Durable Function (avec etat) ou flux de travail Azure Logic Apps
.xsdSchema XMLDefinit la structure des messages circulant dans BizTalk. Chaque type de message a un XSD. L'espace de noms dans le XSD est l'identifiant du type de message BizTalk.JSON Schema / definition de schema OpenAPI
.btmCarteTransforme un schema de message (XSD) en un autre. Utilise XSLT en arriere-plan avec un concepteur glisser-deposer.Operations de donnees Azure Logic App, transformation Azure Function, ou politique de transformation APIM
.btpPipelineDefinit comment les donnees brutes (octets) sont traitees a la reception entrante ou a l'envoi sortant. Contient des composants de pipeline (desassemblage, validation, encodage/decodage). Les composants de pipeline personnalises sont des assemblages .NET compiles.Politique APIM (entrante/sortante), liaison d'entree Azure Function
.btenvsettingsParametres d'environnementFichier XML associant les variables de liaison (${NomVariable}) a des valeurs concretes par environnement (dev/uat/prod). Ne fait pas partie de l'assemblage compile — applique au deploiement.Azure App Settings + Key Vault

Artefacts de deploiement

ExtensionNomContenuEquivalent Azure
PortBindingsMaster.xmlExport des liaisons de portsExport complet de toutes les configurations d'applications BizTalk : emplacements de reception, ports d'envoi, liaisons d'orchestration, adaptateurs, affectations de pipeline, proprietes de transport. Le fichier le plus important pour comprendre un systeme BizTalk en fonctionnement.Infrastructure en tant que code (modele Bicep) + App Settings
.msiPaquet de deploiement BizTalkInstalleur MSI contenant tous les assemblages compiles et l'export de liaisons. Utilise pour deployer sur le serveur BizTalk.Deploiement Bicep + deploiement de l'application Function
.dll / GACAssemblages compilesBizTalk compile chaque projet en un assemblage .NET deploye dans le Global Assembly Cache (GAC) de Windows. Les assemblages auxiliaires contiennent de la logique metier non visible dans les fichiers source ODX ou XSD.Code Azure Function (visible, dans le controle de code source)

Comment lire un PortBindingsMaster.xml

Le PortBindingsMaster.xml est votre carte de navigation. Il decrit la configuration d'execution de toutes les applications BizTalk — utilisez-le pour comprendre ce que BizTalk fait avant de lire tout fichier d'orchestration.

Vue d'ensemble de la structure

<BindingInfo>
  <ModuleRefCollection>               <!-- Une entree par application BizTalk -->
    <ModuleRef Name="STM.ICUTexto.EAI" ...>

      <ServiceRefCollection>          <!-- Une entree par type d'orchestration -->
        <ServiceRef Name="EnvoyerSMS" ...>
          <Ports>                     <!-- Ports logiques utilises par cette orchestration -->
            <Port Name="VuduSendPort" .../>
          </Ports>
        </ServiceRef>
      </ServiceRefCollection>

    </ModuleRef>
  </ModuleRefCollection>

  <SendPortCollection>                <!-- TOUS les ports d'envoi de TOUTES les applications -->
    <SendPort Name="STM.ICUTexto.EAI_vuduSend" ...>
      <PrimaryTransport>              <!-- Ou BizTalk envoie les messages -->
        <Address>${uriFournisseur}/send</Address>
        <TransportType Name="WCF-WebHttp"/>
        <TransportTypeData>...</TransportTypeData>   <!-- Config de l'adaptateur en XML -->
      </PrimaryTransport>
      <Filter>                        <!-- Filtre d'abonnement MessageBox (pour les ports non pilotes par orchestration) -->
        <Group>
          <Statement Property="BTS.MessageType" Operator="0" Value="http://...#Texto"/>
        </Group>
      </Filter>
    </SendPort>
  </SendPortCollection>

  <ReceivePortCollection>             <!-- TOUS les ports de reception (regroupements logiques) -->
    <ReceivePort Name="STM.ICUTexto.EAI_EnvoiTexto" ...>
      <ReceiveLocations>              <!-- Points de terminaison d'ecoute physiques -->
        <ReceiveLocation Name="STM.ICUTexto.EAI_EnvoiTexto.WCF-WebHttp"
                         Address="/icutexto/api.svc"
                         Enable="true" ...>
          <ReceivePipeline Name="Microsoft.BizTalk.DefaultPipelines.PassThruReceive" .../>
          <TransportType Name="WCF-WebHttp"/>
          <TransportTypeData>         <!-- Config de l'adaptateur — chercher ici l'authentification, details de liaison -->
            <CustomProps>
              <HttpHeaders vt="8">Authorization: Basic {base64creds}</HttpHeaders>
            </CustomProps>
          </TransportTypeData>
        </ReceiveLocation>
      </ReceiveLocations>
    </ReceivePort>
  </ReceivePortCollection>

</BindingInfo>

Exemple annote : port d'envoi SMS STM.ICUTexto.EAI

<!-- STM.ICUTexto.EAI_vuduSend — envoie des SMS via l'API VuDu -->
<SendPort Name="STM.ICUTexto.EAI_vuduSend"
          Status="2"                <!-- 2 = Inscrit (actif); 1 = Desinscrit (inactif) -->
          TransmitPipeline="Microsoft.BizTalk.DefaultPipelines.PassThruTransmit">

  <PrimaryTransport>
    <!-- OU les messages sont envoyes -->
    <Address>${uriFournisseur}</Address>          <!-- Parametre — valeur dans .btenvsettings -->
    <TransportType Name="WCF-WebHttp" Capabilities="3" ConfigurationClsid="..."/>
    <RetryCount>0</RetryCount>                   <!-- IMPORTANT : 0 = aucun reessai (envoi sans confirmation) -->
    <RetryInterval>5</RetryInterval>              <!-- Secondes entre les reessais (sans objet ici puisque RetryCount=0) -->

    <TransportTypeData>
      <!-- Configuration de l'adaptateur WCF-WebHttp — encode en XML dans un CDATA -->
      <CustomProps>
        <EnabledEndpointBehaviors vt="8">
          STM.WCFHttpHeaderBehavior.EAI.Inspector  <!-- Comportement personnalise injectant l'en-tete d'authentification -->
        </EnabledEndpointBehaviors>
        <HttpMethod vt="8">POST</HttpMethod>
        <SuppressMessageBodyForHttpVerbs vt="8">GET HEAD</SuppressMessageBodyForHttpVerbs>
      </CustomProps>
    </TransportTypeData>
  </PrimaryTransport>

  <!-- PAS d'element Filter ici = port pilote par orchestration (pas par abonnement MessageBox) -->
  <!-- Les ports AVEC un element Filter sont pilotes par la publication/abonnement du MessageBox (patron CBR) -->

</SendPort>

Comment lire ceci comme une tache de migration Azure :

Exemple annote : stub de recuperation CBR (port pilote par filtre)

<!-- STM.ICUTextoRecup.EAI — recupere les messages Texto du MessageBox et ecrit dans un FILE -->
<SendPort Name="STM.ICUTextoRecup.EAI_RecupererTexto">
  <PrimaryTransport>
    <Address>${RepertoireTexto}\%MessageID%.xml</Address>     <!-- Chemin FILE -->
    <TransportType Name="FILE"/>
  </PrimaryTransport>

  <Filter>                           <!-- C'est ce qui en fait un stub CBR -->
    <Group>
      <Statement
        Property="BTS.MessageType"
        Operator="0"                 <!-- 0 = Egal -->
        Value="http://www.stm.info/namespaces/internal/icu/communicationusager/1#Texto"/>
    </Group>
  </Filter>
</SendPort>

Comment lire ceci comme une tache de migration Azure :


Comment lire un fichier d'orchestration .odx

Une orchestration est un « programme » BizTalk exprime sous forme d'organigramme. Ouvert dans Visual Studio, il s'affiche graphiquement. Ouvert en XML (renommer en .xml), c'est du code XLANG/S.

Formes cles (concepteur visuel)

Nom de la formeCe qu'elle faitEquivalent Azure
Forme Reception (cercle vert)Attend qu'un message arrive sur un port de reception. Si Activate=true, elle demarre une nouvelle instance d'orchestration.Declencheur HTTP, declencheur Service Bus, declencheur minuterie
Forme Envoi (fleche)Envoie un message a un port d'envoi.HttpClient.PostAsync, envoi Service Bus, ecriture SQL
Forme Decision (losange)Branche si/sinon. La condition est une expression BizTalk (similaire au C#).Instruction if dans le code de la Function; politique <choose> APIM
Forme Boucle (fleche circulaire)Boucle while. Condition verifiee avant chaque iteration.while dans Durable Function avec CreateTimer
Forme Actions parallelesExecute plusieurs branches simultanement.Task.WhenAll dans Durable Function
Forme Appel d'orchestrationInvoque de facon synchrone une orchestration enfant (bloque jusqu'au retour).CallActivityAsync dans Durable Function
Forme Demarrer orchestrationDemarre de facon asynchrone une orchestration enfant (envoi sans attente).StartNewAsync dans le client Durable Function
Forme Expression (formule)Execute du code C# pour calculer des valeurs, appeler des methodes .NET. C'est la que les methodes d'assemblages auxiliaires sont appelees.Code en ligne dans la Function
Forme Etendue (Scope)Regroupe des formes dans une limite de transaction avec gestionnaires d'exceptions.Bloc try/catch dans la Function
Gestionnaire d'exception CatchAttrape un type d'exception specifique (similaire au catch C#).Bloc catch dans la Function
Ensemble de correlationAssocie les messages a une instance d'orchestration en cours a l'aide d'une valeur cle. Utilise pour les patrons de rappel (convoy).Durable Function WaitForExternalEvent avec ID d'instance
Forme SuspendreSuspend l'orchestration (arrete l'execution, attend la reprise par un operateur).Etat d'erreur Durable Function — declencher une alerte
Forme TerminerMet fin a l'instance d'orchestration (succes ou echec).La Function se termine ou leve une exception
Affectation de messageCree et remplit un objet message BizTalk.Construction d'objet dans le code de la Function
Forme TransformationApplique une carte BizTalk (.btm) pour transformer un message.Operation de donnees Azure Logic Apps, transformation JSON de la Function

Lecture du flux d'orchestration STM ICUTexto (exemple)

Depuis integration-inventory.md, la solution SMS a 7 orchestrations :

1. EnvoyerMessageUsagerTexto  <- Activate=true sur /icutexto/api.svc
        |
        v Appel d'orchestration
2. EnvoyerSMS                 <- Decision : unique ou lot?
   |-- Appel : EnvoyerSMSVudu   (unique -> VuDu POST /send)
   '-- Appel : EnvoyerSMSVuduBatch (lot -> VuDu POST /send_batch)
        |
        v Appel d'orchestration (apres l'envoi VuDu)
3. SauvegarderDetailsEnvoi    <- Envoi vers WCF-SQL (procedure stockee SauvegarderTraitementSMS)
        |
   [En parallele, declencheur separe :]
4. MettreAJourBroadcast       <- Activate=true sur Schedule (minuterie)
        | Boucle : tant qu'il reste des lots non traites
        '-- Envoi vers WCF-SQL (updBroadcast)
            Envoi vers VuDu /get_broadcast

5. MettreAJourFeed            <- Status=Desinscrite (N'EST PAS EN EXECUTION — ne pas migrer)

Comment tracer ceci dans le code source :

  1. Ouvrir PortBindingsMaster.xml, trouver STM.ICUTexto.EAI dans ModuleRefCollection
  2. Trouver le ServiceRef pour EnvoyerMessageUsagerTexto — montre a quel port il est lie
  3. Ouvrir EnvoyerMessageUsagerTexto.odx dans Visual Studio — chercher la forme Reception avec Activate=true
  4. Suivre les formes Envoi pour voir quels ports sont appeles; recouper les noms de ports dans SendPortCollection

Formes Expression et appels d'assemblages auxiliaires

La chose la plus importante a chercher dans les formes Expression est les appels aux assemblages auxiliaires compiles :

// Exemple de contenu d'une forme Expression (syntaxe XLANG/S) :
varAuthHeader = STM.ICUTexto.EAI.Helper.Securite.DemanderStatusHelper.ObtenirHeader(msgTexto.Source);
varServicePlanId = STM.ICUTexto.EAI.Helper.Securite.DemanderStatusHelper.ObtenirServicePlanId(msgTexto.Source);

Ce que cela vous indique :

Chercher ces patrons de noms de methodes dans les formes Expression :


Comment lire le fichier XML des parametres d'environnement BizTalk

Le fichier .btenvsettings associe les variables de liaison parametrees a des valeurs concretes par environnement.

<EnvironmentSettings>
  <Settings>
    <!-- Chaque parametre associe un ${NomVariable} dans PortBindingsMaster.xml a une valeur -->

    <Setting Name="uriFournisseur"
             Value.Dev="https://api.vudu-dev.com"
             Value.UAT="https://api.vudu-uat.com"
             Value.Prod="https://api.vudu.com"/>

    <Setting Name="IcuDbAdress"
             Value.Dev="mssql://SQLEAIDEV//ICU"
             Value.UAT="mssql://SQLEAIUAT//ICU"
             Value.Prod="mssql://SQLEAIPR//ICU"/>

    <Setting Name="IntervalPollingBroadcast"
             Value.Dev="60000"     <!-- millisecondes — 1 minute en dev -->
             Value.Prod="300000"/> <!-- millisecondes — 5 minutes en prod -->

  </Settings>
</EnvironmentSettings>

Comment utiliser ceci :


Patrons BizTalk courants et leurs equivalents Azure

Patron 1 : Requete/Reponse (HTTP synchrone)

BizTalk : Emplacement de reception WCF-WebHttp (GET ou POST) → l'orchestration traite → retourne la reponse dans la meme connexion HTTP.

Azure : APIM → Azure Function (declencheur HTTP) → retourne la reponse. Pour les operations courtes seulement. Si le traitement prend plus de 30 secondes, basculer vers 202 Accepted + interrogation de statut.


Patron 2 : Publication/Abonnement via MessageBox

BizTalk : L'orchestration publie un message type dans le MessageBox BizTalk. Un ou plusieurs ports d'envoi avec des elements Filter correspondants le recuperent et le transmettent.

Azure : La Function publie vers un sujet Azure Service Bus. Un ou plusieurs abonnements Service Bus avec des regles de filtre SQL le recuperent et declenchent des Functions en aval.

Exemple de migration de filtre :

BizTalk :  BTS.MessageType == "http://stm.info/...#Texto"
Azure SB : SELECT * FROM messages WHERE MessageType = 'Texto'

Patron 3 : Convoy longue duree (attente de rappel)

BizTalk : L'orchestration envoie une requete a un systeme externe, puis utilise un ensemble de correlation pour attendre un message entrant correspondant (rappel) sur un emplacement de reception separe. Une etendue avec delai d'attente gere la fenetre d'attente.

Azure : L'orchestrateur Durable Function appelle CallActivityAsync (requete sortante), puis WaitForExternalEvent (bloque jusqu'a l'arrivee du rappel ou le declenchement de la minuterie). L'emplacement de reception APIM pour le rappel appelle RaiseEventAsync sur l'instance Durable Function.

Ce patron apparait dans STM.ICU.EAI (Voix Telus) : BizTalk initie un appel via Telus RVI, puis attend jusqu'a 8 minutes que Telus rappelle sur /icu/telus.svc.


Patron 4 : Stub de routage base sur le contenu (CBR)

BizTalk : Aucune orchestration. Un port d'envoi avec un element Filter s'abonne a tous les messages d'un type specifique dans le MessageBox et les route vers une destination (FILE, point de terminaison WCF, etc.).

Azure : Abonnement de sujet Service Bus avec filtre. Aucun code requis. Ce sont les 4 solutions « Recup » de ce projet — declassees en Phase 0 et remplacees par des abonnements Service Bus.


Patron 5 : Traitement par lots planifie (minuterie → SQL → ecriture)

BizTalk : L'adaptateur Schedule se declenche a une heure configuree, publie un message declencheur dans le MessageBox, activant une orchestration qui interroge SQL et traite les lignes.

Azure : Declencheur minuterie Azure Functions avec expression CRON → requete SqlClient → traitement des resultats. ICUTextoExtraction.EAI utilise ce patron (quotidien a 01h00).


Patron 6 : Boucle declenchee par FILE

BizTalk : L'emplacement de reception FILE surveille un partage UNC pour des fichiers .xml. Quand un fichier arrive, il declenche une orchestration. Frequemment utilise pour le rejeu manuel (deposer un fichier pour declencher le traitement).

Azure : Declencheur Azure Blob Storage (evenementiel; un fichier arrive dans le conteneur blob → la Function se declenche). Ou conserver le partage UNC temporairement avec un declencheur de recurrence Azure Logic Apps pendant la transition.

La boucle de rejet de courriel (TraiterRejets) utilise ce patron — un FILE depose dans ${RepertoireDeclenchement} declenche l'orchestration de reconciliation des rebonds. Remplacement Azure : declencheur minuterie a 0 0 3 * * * (03h00 quotidien). Action requise : auditer le repertoire pour les fichiers accumules avant la mise en production.


Patron 7 : Boucle d'interrogation sequentielle

BizTalk : L'orchestration boucle (tant que condition), appelant un port d'envoi a chaque iteration pour interroger une API externe ou SQL. Si une iteration leve une exception non geree, toute la boucle est suspendue.

Azure : Orchestrateur Durable Function iterant avec CreateTimer entre les iterations, appelant CallActivityAsync par element. Chaque echec d'activite est isole — les autres elements continuent. Remplace MettreAJourBroadcast (interrogation de statut VuDu) et TraiterRejets (boucle de reconciliation des rebonds).


Glossaire : termes BizTalk → termes Azure

Terme BizTalkDefinitionEquivalent Azure
ApplicationUn groupe nomme d'artefacts BizTalk (orchestrations, schemas, cartes, ports) deployes ensemble. Similaire a un microservice.Groupe de ressources Azure + Function App
OrchestrationUn processus metier avec etat defini sous forme d'organigramme; l'unite de logique principale.Azure Durable Function (avec etat) ou flux de travail Logic App
Emplacement de receptionUn point de terminaison physique sur lequel BizTalk ecoute (URL, chemin de fichier, connexion SQL). Plusieurs emplacements peuvent partager un meme port de reception.Chemin APIM, declencheur Azure Function
Port de receptionRegroupement logique d'un ou plusieurs emplacements de reception. Definit le contrat entrant.API APIM
Port d'envoiDefinit ou et comment BizTalk envoie un message (URL, type d'adaptateur, nombre de reessais). Lie a un point de terminaison physique.Appel client HTTP depuis la Function, expediteur Service Bus, commande SQL
AdaptateurConnecteur specifique au protocole (WCF-WebHttp, WCF-SQL, FILE, SMTP, Schedule, etc.).Declencheur/liaison Azure Function, connecteur Logic App
Adaptateur WCF-WebHttpAdaptateur BizTalk pour la communication REST/HTTP (reception entrante et envoi sortant).APIM (entrant), HttpClient dans la Function (sortant)
Adaptateur WCF-SQLAdaptateur BizTalk pour SQL Server (reception par interrogation et envoi type de procedure/requete).SqlClient avec identite geree, liaisons Azure SQL
PipelinePre/post-traitement des octets bruts du message : desassemblage, validation, encodage/decodage, composants personnalises. Applique a la reception ou a l'envoi.Politique APIM (entrante/sortante), liaison d'entree Function
MessageBoxBase de donnees SQL Server utilisee comme courtier de messages interne de BizTalk. Toutes les orchestrations publient/s'abonnent a travers elle.Azure Service Bus
Abonnement / FiltreUn predicat (type de message, valeurs de proprietes) qui determine quels messages un port d'envoi ou une orchestration recoit du MessageBox.Abonnement de sujet Service Bus avec filtre SQL
Ensemble de correlationUn ensemble de proprietes de message utilise pour router les messages entrants vers une instance d'orchestration en cours d'execution specifique (pour les rappels).ID d'instance Durable Function + WaitForExternalEvent
ConvoyUn patron d'orchestration ou une instance gere une sequence de messages relies identifies par une cle de correlation. Utilise pour les flux de travail de longue duree.Orchestrateur Durable Function
BizTalk SSOBizTalk Single Sign-On — magasin d'identifiants pour les secrets d'adaptateurs (mots de passe, jetons, chaines de connexion). Ce n'est pas du SSO utilisateur.Azure Key Vault
GACGlobal Assembly Cache de Windows — ou les assemblages compiles BizTalk sont deployes. Les assemblages auxiliaires contenant la logique metier s'y trouvent.Paquet de deploiement Azure Function
Inscrit / DesinscritEtats d'orchestration. Inscrit = actif et traitant les messages. Desinscrit = deploye mais ne traite pas.Function en cours d'execution / arretee
SuspenduUne orchestration ou un message qui s'est arrete en raison d'une erreur et attend l'intervention d'un operateur.Message dans la DLQ Service Bus
Propriete promueUne propriete de message extraite du corps du message et promue dans le contexte du message, la rendant disponible pour le routage et le filtrage.Proprietes personnalisees de message Service Bus
Carte (.btm)Une transformation XSLT graphique entre deux schemas.Operation de donnees Azure Logic App, mappage JSON de la Function
Schema (.xsd)Schema XML definissant un type de message BizTalk. L'URI de l'espace de noms est l'identifiant du type de message dans les filtres.JSON Schema / schema OpenAPI
Liaison de portConfiguration reliant un port logique d'une orchestration a un port d'envoi/reception physique. Appliquee au deploiement.Parametre Bicep / App Setting
Hote / Instance d'hoteLe processus de service Windows qui execute les orchestrations et adaptateurs BizTalk. Plusieurs instances peuvent fonctionner pour la mise a l'echelle.Plan de consommation Azure Functions (mise a l'echelle automatique)
TransportLe protocole/adaptateur utilise par un port d'envoi ou un emplacement de reception (WCF-WebHttp, FILE, SMTP, etc.).Type de declencheur Azure Function, type de connecteur
OrderedDeliveryUn parametre de port d'envoi qui serialise la livraison des messages pour assurer le traitement sequentiel.File Service Bus avec sessions
RetryCount / RetryIntervalNombre de tentatives de livraison et temps d'attente entre les reessais sur un port d'envoi. Plusieurs ports STM ont RetryCount=0 (aucun reessai).Attribut ExponentialBackoffRetry sur la Function; politique de reessai host.json
TrackingOption=NoneDesactive le suivi des messages BizTalk pour la performance. Effet secondaire : aucune donnee de tracabilite historique n'est disponible.Application Insights (doit etre instrumente des le premier jour)
BizTalk Rule EngineComposant BizTalk optionnel pour les regles metier declaratives (non utilise dans ce code source).Moteur de regles Azure Logic Apps (non requis ici)