BTDF : gérer plusieurs master binding partiels

Simon Emmanuel RIVAS
Catégorie : BizTalk
08/10/2018

Lorsque vous travaillez sur un projet de déploiement BTDF, il peut être utile de découper le master binding de l’application BizTalk en plusieurs fichiers séparés. Ainsi :

  • Le projet est plus facilement maintenable : vous pouvez grouper les ports, parties etc en unités de déploiement logique, et il n’est pas nécessaire de systématiquement parcourir l’ensemble du master binding monolithique pour apporter une modification;
  • Dans le même ordre d’idée, si une coquille se cache dans votre binding et empêche son import dans BizTalk, vous saurez quel fichier ne s’importe pas, ce qui limitera grandement le périmètre de vos recherches pour débugger ledit binding;
  • Dans des déploiement partiels, cela permet également de mettre à jour la configuration de l’application BizTalk uniquement sur le périmètre visé par le déploiement partiel.

 

Le comportement par défaut de BTDF ne permet pas d’utiliser plusieurs binding masters (il n’est possible de spécifier qu’un seul fichier dans la propriété PortBindingsMaster). Au passage, dans mes recherches sur le sujet j’ai trouvé cet article sur Technet, très intéressant mais adressant un cas d’usage au final complètement différent : l’auteur utilise un binding master monolithique par environnement (donc effectivement plusieurs binding masters dans son projet, mais malgré tout un seul et unique par environnement). Au contraire le but ici est d’avoir plusieurs binding masters, quel que soit l’environnement.

 

La solution que je propose ici est de désactiver le mécanisme standard de traitement des bindings de BTDF et de s’appuyer plutôt sur le mécanisme de preprocessing XML.

 

Les étapes sont les suivantes :

 

Construire la liste de master bindings

 

Editez votre fichier projet .btdfproj. Pour chaque binding master, ajouter un élément FilesToXmlPreProcess avec un élément FileType, comme illustré ci-dessous :

<FilesToXmlPreprocess Include= »RelativePathToYouBindingMaster\Master.Binding.Flow1.xml »>

<OutputFilename>Binding.Flow1.xml</OutputFilename>
<FileType>binding</FileType>

</FilesToXmlPreprocess>

Contournez le mécanisme de traitement des bindings par défaut

 

Pour ce faire, il vous faudra éditer le fichier BizTalkDeploymentFramework.targets (situé dans le répertoire C:\Progam Files (x86)\MSBuild\BizTalkDeploymentFramework\5.0) :

  • Commentez ou supprimez l’intégralité du contenu de la target PreprocessBindings
  • Remplacez la target ImportBindings par le code suivant :

 

<Target Name= »ImportBindings » DependsOnTargets= »InitializeAppName » Condition= »‘$(IncludeMessagingBindings)’ == ‘true' » >

<!– Ne prendre en compte que les FilesToXmlPreprocess avec FileType = ‘binding’  –>
<ItemGroup>
<DeployPortBindingsGroup Include= »%(FilesToXmlPreprocess.OutputFilename) » Condition= »‘%(FileType)’==’binding' » />
</ItemGroup>

<Message Text= »No binding file to process » Importance= »High » Condition= »‘@(DeployPortBindingsGroup)’== » » />
<!– Ecraser le nom d’application cible –>
<WriteXmlValue XmlFilenames= »Resources\Bindings\%(DeployPortBindingsGroup.Identity) » XPath= »//ApplicationName » Value= »$(BizTalkAppName) » Condition= »‘@(DeployPortBindingsGroup)’!= » » />

<!– Importer les fichiers de binding résultant –>
<Exec Command= »BTSTask.exe ImportBindings -Source:&quot;Resources\Bindings\%(DeployPortBindingsGroup.Identity)&quot; -ApplicationName:&quot;$(BizTalkAppName)&quot; »
Condition= »‘@(DeployPortBindingsGroup)’!= » » />

<Pause Message= »Press a key to continue… » Condition= »‘$(Interactive)’ == ‘true' » />
<OnError ExecuteTargets= »PauseForError » />

</Target>

 

Voilà qui devrait faire l’affaire. Amusez-vous bien 😉