Création d’un service de messagerie d’itinéraire personnalisé
L’infrastructure d’itinéraire qui fait partie de Microsoft BizTalk ESB Toolkit prend en charge l’exécution des étapes d’itinéraire à l’aide de classes implémentant l’interface IMessagingService qui exécutent des services de messagerie d’itinéraire. Vous pouvez implémenter un service de messagerie personnalisé lorsque vous souhaitez que le service soit responsable des éléments suivants :
Validation de message personnalisée configurée dans l’itinéraire
Transformation de message personnalisée configurée dans l’itinéraire
Traitement personnalisé du message
Dans tous ces cas, un service d’itinéraire personnalisé que vous implémentez agit en tant qu’intercepteur et est appelé par le composant de pipeline Dispatcher.
Les services d’itinéraire basés sur la messagerie personnalisée, ou services de messagerie, implémentent tous l’interface IMessagingService . Cette interface expose les propriétés Name et SupportsDisassemble , ainsi que les méthodes Execute et ShouldAdvanceStep .
La propriété Name est le nom du service tel qu’il apparaîtra dans un itinéraire. Il doit correspondre au nom configuré dans la configuration des services d’itinéraire dans le fichier Esb.config.
La propriété SupportsDisassemble indique si le service de messagerie personnalisé que vous créez prend en charge le désassemblement et l’exécution de plusieurs résolveurs.
La méthode ShouldAdvanceStep prend l’étape d’itinéraire en cours et le message actuel, et retourne une valeur booléenne qui indique si le répartiteur doit avancer l’itinéraire après l’exécution du service. Dans presque tous les cas, cette méthode doit retourner true.
La méthode Execute est d’une importance capitale pour un service de messagerie et contient la logique qui sera exécutée au moment de l’exécution. Il prend dans le contexte du pipeline, le message, la chaîne du programme de résolution et l’étape d’itinéraire actuelle ; et retourne le message mis à jour.
Une implémentation de référence de la méthode Execute se trouve dans le fichier RoutingService.cs de l’ESB. Projet Itinerary.Services, comme indiqué dans le code suivant.
public IBaseMessage ExecuteRoute(IPipelineContext context, IBaseMessage msg, string resolverString)
{
if (context == null)
throw new ArgumentNullException("context");
if (msg == null)
throw new ArgumentNullException("msg");
if (string.IsNullOrEmpty(resolverString))
throw new ArgumentException(Properties.Resources.ArgumentStringRequired, "resolverString");
try
{
ResolverInfo info = ResolverMgr.GetResolverInfo(ResolutionType.Endpoint, resolverString);
if (!info.Success)
throw new RoutingException(Properties.Resources.ResolverStringInvalid, resolverString);
// Resolve configuration for routing.
Dictionary<string, string> resolverDictionary = ResolverMgr.Resolve(info, msg, context);
if (string.IsNullOrEmpty(resolverDictionary["Resolver.TransportLocation"]))
throw new RoutingException(Properties.Resources.TransportLocationNotResolved, resolverString);
AdapterMgr.SetEndpoint(resolverDictionary, msg.Context);
return msg;
}
catch (System.Exception ex)
{
EventLogger.Write(MethodInfo.GetCurrentMethod(), ex);
throw;
}
}
Pour implémenter un service d’itinéraire personnalisé pour la messagerie
Créez un assembly avec une classe qui dérive de IMessagingService ; dans la méthode Execute , incluez toute la logique nécessaire pour apporter des modifications au message ou au contexte du message (le cas échéant).
Ajoutez une entrée dans la section itineraryServices du fichier Esb.config pour votre service en ajoutant un <élément itineraryService> avec un GUID comme attribut id , le nom du service comme attribut name , le nom complet de la classe comme attribut de type , messagerie comme attribut d’étendue et l’étape autorisée (par exemple, OnRampReceive, OnRampSend, OffRampSend, OffRampReceive, AllSend, AllReceive ou All) en tant qu’attribut stage .
Inscrivez le nouvel assembly dans le Global Assembly Cache.