Reference rapide pour les developpeurs qui n'ont jamais travaille avec BizTalk Server. Lire ceci avant d'ouvrir tout fichier source BizTalk.
| Extension | Nom | Contenu | Equivalent Azure |
|---|---|---|---|
.sln | Solution Visual Studio | Regroupe plusieurs projets BizTalk | Sans objet (remplace par des groupes de ressources Azure distincts par solution) |
.btproj | Projet BizTalk | Fichier de projet MSBuild listant tous les artefacts d'une application BizTalk | Sans objet |
.snk | Cle de nom fort | Signe l'assemblage compile — requis pour le deploiement GAC | Sans objet dans Azure |
| Extension | Nom | Contenu | Equivalent Azure |
|---|---|---|---|
.odx | Orchestration | Le « 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 |
.xsd | Schema XML | Definit 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 |
.btm | Carte | Transforme 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 |
.btp | Pipeline | Definit 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 |
.btenvsettings | Parametres d'environnement | Fichier 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 |
| Extension | Nom | Contenu | Equivalent Azure |
|---|---|---|---|
PortBindingsMaster.xml | Export des liaisons de ports | Export 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 |
.msi | Paquet de deploiement BizTalk | Installeur 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 / GAC | Assemblages compiles | BizTalk 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) |
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.
<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>
<!-- 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 :
Address="${uriFournisseur}" → App Setting VUDU_PROVIDER_URI, valeur des operations STMSTM.WCFHttpHeaderBehavior → Secret Key Vault vudu-header-auth injecte dans l'appel HTTP de la FunctionRetryCount=0 → remplacer par un reessai exponentiel explicite a 3 tentatives dans une Durable Function<!-- 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 :
Texto apparait dans le MessageBox BizTalk, le recuperer »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.
| Nom de la forme | Ce qu'elle fait | Equivalent 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 paralleles | Execute plusieurs branches simultanement. | Task.WhenAll dans Durable Function |
| Forme Appel d'orchestration | Invoque de facon synchrone une orchestration enfant (bloque jusqu'au retour). | CallActivityAsync dans Durable Function |
| Forme Demarrer orchestration | Demarre 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 Catch | Attrape un type d'exception specifique (similaire au catch C#). | Bloc catch dans la Function |
| Ensemble de correlation | Associe 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 Suspendre | Suspend l'orchestration (arrete l'execution, attend la reprise par un operateur). | Etat d'erreur Durable Function — declencher une alerte |
| Forme Terminer | Met fin a l'instance d'orchestration (succes ou echec). | La Function se termine ou leve une exception |
| Affectation de message | Cree et remplit un objet message BizTalk. | Construction d'objet dans le code de la Function |
| Forme Transformation | Applique une carte BizTalk (.btm) pour transformer un message. | Operation de donnees Azure Logic Apps, transformation JSON de la Function |
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 :
PortBindingsMaster.xml, trouver STM.ICUTexto.EAI dans ModuleRefCollectionServiceRef pour EnvoyerMessageUsagerTexto — montre a quel port il est lieEnvoyerMessageUsagerTexto.odx dans Visual Studio — chercher la forme Reception avec Activate=trueSendPortCollectionLa 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 :
DemanderStatusHelper.ObtenirHeader(source) — recupere l'en-tete d'authentification VuDu, indexe par Source. Cette logique est dans un assemblage compile et doit etre decompilee avec dotPeek pour etre comprise.DemanderStatusHelper.ObtenirServicePlanId(source) — recupere l'ID du plan de service Vudu par source. Meme probleme.vudu-auth-token-{source} et vudu-service-plan-{source}Chercher ces patrons de noms de methodes dans les formes Expression :
Obtenir* — recupere une valeur (identifiant, configuration, donnee)Verifier* — valide ou verifie quelque choseTraiter* — traite des donnees*Helper.* — toujours dans un assemblage compile; necessite toujours une decompilationLe 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 :
${NomVariable} que vous trouvez dans PortBindingsMaster.xml a une entree correspondante iciBizTalk : 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.
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'
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.
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.
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).
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.
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).
| Terme BizTalk | Definition | Equivalent Azure |
|---|---|---|
| Application | Un groupe nomme d'artefacts BizTalk (orchestrations, schemas, cartes, ports) deployes ensemble. Similaire a un microservice. | Groupe de ressources Azure + Function App |
| Orchestration | Un 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 reception | Un 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 reception | Regroupement logique d'un ou plusieurs emplacements de reception. Definit le contrat entrant. | API APIM |
| Port d'envoi | Definit 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 |
| Adaptateur | Connecteur specifique au protocole (WCF-WebHttp, WCF-SQL, FILE, SMTP, Schedule, etc.). | Declencheur/liaison Azure Function, connecteur Logic App |
| Adaptateur WCF-WebHttp | Adaptateur BizTalk pour la communication REST/HTTP (reception entrante et envoi sortant). | APIM (entrant), HttpClient dans la Function (sortant) |
| Adaptateur WCF-SQL | Adaptateur BizTalk pour SQL Server (reception par interrogation et envoi type de procedure/requete). | SqlClient avec identite geree, liaisons Azure SQL |
| Pipeline | Pre/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 |
| MessageBox | Base 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 / Filtre | Un 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 correlation | Un 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 |
| Convoy | Un 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 SSO | BizTalk 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 |
| GAC | Global 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 / Desinscrit | Etats d'orchestration. Inscrit = actif et traitant les messages. Desinscrit = deploye mais ne traite pas. | Function en cours d'execution / arretee |
| Suspendu | Une 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 promue | Une 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 port | Configuration reliant un port logique d'une orchestration a un port d'envoi/reception physique. Appliquee au deploiement. | Parametre Bicep / App Setting |
| Hote / Instance d'hote | Le 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) |
| Transport | Le 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 |
| OrderedDelivery | Un parametre de port d'envoi qui serialise la livraison des messages pour assurer le traitement sequentiel. | File Service Bus avec sessions |
| RetryCount / RetryInterval | Nombre 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=None | Desactive 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 Engine | Composant BizTalk optionnel pour les regles metier declaratives (non utilise dans ce code source). | Moteur de regles Azure Logic Apps (non requis ici) |