Déploiement et démarrage d'une nouvelle version d'une orchestration par programme
Le code de cette rubrique illustre comment déployer et démarrer rapidement une nouvelle version de l’orchestration. Les opérations manuelles pouvant durer quelques secondes, désinscrire une orchestration puis en démarrer une nouvelle version peut provoquer la suspension ou la duplication des messages. La méthode par programme illustrée dans cette rubrique vous permet d’effectuer ces opérations beaucoup plus rapidement – ce qui réduit les risques de suspension et de duplication de messages - et en une seule transaction, de sorte que si une opération échoue, toutes les orchestrations restent dans le même état qu'au démarrage.
Notes
Dans de rares cas, lorsque l’orchestration que vous mettez à jour avec une nouvelle version fonctionne sous une charge élevée, certains messages peuvent être suspendus même lorsque vous désinscrivez et inscrivez les orchestrations par programme. Après avoir effectué ces opérations, nous vous recommandons de case activée votre file d’attente de messages suspendus et de reprendre les messages suspendus.
L’exemple de code suivant illustre comment utiliser les API de modèles objet de l'explorateur pour désinscrire une orchestration existante et démarrer la nouvelle version de l'orchestration.
using System;
using Microsoft.BizTalk.ExplorerOM;
#endregion
namespace OrchestrationBinding
{
class OrchestrationBinding
{
static void Main(string[] args)
{
UpdateOrchestration();
}
static public void UpdateOrchestration()
{
// Create the root object and set the connection string
BtsCatalogExplorer catalog = new BtsCatalogExplorer();
catalog.ConnectionString = "SERVER=.;DATABASE=BizTalkMgmtDb;Integrated Security=SSPI";
string orchestrationAssemblyV1 = "HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=99561c477e487f14";
string orchestrationAssemblyV2 = "HelloWorld, Version=2.0.0.0, Culture=neutral, PublicKeyToken=99561c477e487f14";
string orchestrationName = "Microsoft.Samples.BizTalk.HelloWorld.HelloSchedule";
try
{
BtsAssembly assemblyV1 = FindAssemblyByFullName(catalog.Assemblies, orchestrationAssemblyV1);
BtsAssembly assemblyV2 = FindAssemblyByFullName(catalog.Assemblies, orchestrationAssemblyV2);
BtsOrchestration orchestrationV1 = assemblyV1.Orchestrations[orchestrationName];
BtsOrchestration orchestrationV2 = assemblyV2.Orchestrations[orchestrationName];
orchestrationV1.Status = OrchestrationStatus.Unenlisted;
orchestrationV2.Status = OrchestrationStatus.Started;
// Commit the accumulated changes transactionally
catalog.SaveChanges();
}
catch (Exception e)
{
catalog.DiscardChanges();
throw;
}
}
static BtsAssembly FindAssemblyByFullName(BtsAssemblyCollection assemblies, string fullName)
{
foreach (BtsAssembly assembly in assemblies)
{
if (assembly.DisplayName == fullName)
return assembly;
}
return null;
}
}
}
Voir aussi
Mise à jour des applications BizTalk
Inscription d'une orchestration
Annulation de l'inscription d'une orchestration