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 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 :
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>
Pour ce faire, il vous faudra éditer le fichier BizTalkDeploymentFramework.targets (situé dans le répertoire C:\Progam Files (x86)\MSBuild\BizTalkDeploymentFramework\5.0) :
<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:"Resources\Bindings\%(DeployPortBindingsGroup.Identity)" -ApplicationName:"$(BizTalkAppName)" »
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 😉