Utilisation des composants du résolveur dans votre code
Le fragment de code suivant de l’agent de transformation dynamique montre la fonctionnalité de résolution juste-à-temps (JIT) par défaut. Vous pouvez facilement implémenter la résolution dans votre propre application à l’aide d’un code similaire.
//XLANGs
itinerary = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryWrapper();
step = new Microsoft.Practices.ESB.Itinerary.SerializableItineraryStepWrapper();
itinerary.Itinerary = Microsoft.Practices.ESB.Itinerary.ItineraryOMFactory.Create(InboundMessage);
step.ItineraryStep = itinerary.Itinerary.GetItineraryStep(InboundMessage);
resolvers = step.ItineraryStep.ResolverCollection;
resolvers.MoveNext();
resolver = resolvers.Current;
// Pass the resolver configuration to the Resolver mgr for resolution.
resolverDictionary = Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(InboundMessage, resolver);
// Set the transform type.
transformType = resolverDictionary.Item("Resolver.TransformType");
Dans la liste précédente, la méthode Resolve de la classe ResolverMgr retourne un objet Dictionary qui contient toutes les propriétés de résolution par défaut et leurs valeurs résolues. Tout programme de résolution personnalisé peut ajouter des propriétés personnalisées à l’objet Dictionary ; cela rend ces propriétés disponibles pour tout service d’itinéraire personnalisé.
Le tableau suivant montre les propriétés qui peuvent éventuellement être remplies par les résolveurs inclus dans microsoft BizTalk ESB Toolkit. Tout service d’itinéraire peut récupérer ces valeurs de propriété en les extrayant de l’objet Dictionary retourné.
Propriétés :
Resolver.Action | Resolver.ActionField | Resolver.DocumentSpecName |
Resolver.Success | Resolver.EndpointConfig | Resolver.DocumentSpecStrongName |
Resolver.FixJaxRpc | Resolver.InboundTransportType | Resolver.EpmRRCorrelationToken |
Resolver.InterchangeId | Resolver.IsRequestResponse | Resolver.InboundTransportLocation |
Resolver.MessageType | Resolver.MethodName | Resolver.MessageExchangePattern |
Resolver.ReceivePortName | Resolver.TransportLocation | Resolver.OutboundTransportCLSID |
Resolver.TransformType | Resolver.TargetNamespace | Resolver.ReceiveLocationName |
Resolver.TransportType | Resolver.TransportNamespace | Resolver.WindowUserField |
Resolver.CacheTimeout |
Une fois que le gestionnaire de résolution a retourné l’objet Dictionary instance, le gestionnaire d’adaptateurs définit les propriétés de contexte de l’adaptateur BizTalk spécifiques du message. Le fragment de code suivant de l’agent de routage montre comment utiliser le gestionnaire d’adaptateurs pour définir les propriétés de point de terminaison du message sortant.
//XLANGs
// Set the transport properties.
transportLocation = resolverDictionary.Item("Resolver.TransportLocation");
transportType = resolverDictionary.Item("Resolver.TransportType");
// Create the delivery message.
DeliveryMessage = InboundMessage;
// Call the adapter manager to set all necessary properties on the message.
Microsoft.Practices.ESB.Adapter.AdapterMgr.SetEndpoint(
resolverDictionary,DeliveryMessage);
// Set the delivery port address.
DeliveryPort(Microsoft.XLANGs.BaseTypes.Address) = transportLocation;
DeliveryPort(Microsoft.XLANGs.BaseTypes.TransportType) = transportType;
Le fragment de code suivant de l’agent de routage montre comment utiliser le gestionnaire d’adaptateurs à partir d’un composant de pipeline personnalisé pour définir les propriétés de point de terminaison d’un message sortant.
// Resolve the configuration for routing.
ResolverDictionary = ResolverMgr.Resolve(info, pInMsg, pContext);
// Call the adapter manager to set all required message properties.
AdapterMgr.SetEndpoint(ResolverDictionary, pInMsg.Context);