Comment résoudre un service de transformation avec BRE qui se produit après une Orchestration dans un itinéraire?

StackOverflow https://stackoverflow.com/questions/2999139

Question

En essayant de mettre en œuvre une intégration simple modèles avec Biztalk Toolkit 2.0 ESB, je suis confronté à un problème en essayant de résoudre un service de transformation Itinéraire qui se produit après un Orchestration.

J'utilise le BRE Resolver pour exécuter des règles qui doivent inspecter le contexte du message propriété type pour déterminer la carte appropriée à l'utilisation. Cependant, une fois que le message atteint l'étape de l'itinéraire associé au service de la transformation, la carte n'exécute.

De une enquête minutieuse, il apparaît que le type de message n'est pas fourni à l'objet « Résolution » qui est utilisée en interne par le résolveur BRE. En effet, étant donné que le message laissant le Orchestration précédent est tapé System.Xml.XmlDocument, le type du message est « rétrogradé » du contexte.

Par règles d'exécution du moteur de suivi, je peux observer que le type du message est en effet perdu pour atteindre le résolveur BRE. Le type de message est vide, alors que fortement typé du document est Microsoft.XLANGs.BaseTypes.Any.

Le service Orchestration que je utilise est pris directement à partir des échantillons livrés avec ESB Toolkit 2.0.

Y at-il un moyen d'effectuer la résolution basée sur le contexte BRE après dans un Orchestration un itinéraire?

Était-ce utile?

La solution

Répondre à ma question ... bref, la clé est de Pret le contexte du message d'origine et de promouvoir la propriété de contexte MessageType. Dans les paragraphes qui suivent, je reproduis un poste à venir sur mon blog :

Itinéraire Orchestration service 101

Après avoir lutté pour faire ce travail et d'essayer différentes solutions, j'ai finalement réussi avec un ensemble de règles simples à suivre. Dans ce post, je voudrais souligner ce qui constitue un bon comportement ESB Toolkit orchestration 2.0 convivial qui peut être utilisé comme un service Itinéraire et encore profiter du moteur de règles métier résolveur pour la transformation dynamique en fonction du type de contexte d'un message .

Contexte d'abonnement pour un service Itinéraire

D'abord, une orchestration conçu pour être utilisé comme un besoin de service Itinéraire à un port logique directe lié, lié à une forme de réception qui définit un abonnement ESB convivial comme ceci:

Microsoft.Practices.ESB.Itinerary.Schemas.ServiceName == "MyCustomItineraryService" And
Microsoft.Practices.ESB.Itinerary.Schemas.ServiceState == "Pending" And
Microsoft.Practices.ESB.Itinerary.Schemas.ServiceType == "Orchestration"

La documentation ne mentionne pas, mais cela montre clairement que les opérations portuaires, liées directement doivent être mis en correspondance avec des messages de type System.Xml.XmlDocument. En effet, si ce n'est pas le cas, l'orchestration ne parviendra pas à exécuter et Routing défaillance message d'erreur sera enregistré à la Message Box .

Soit dit en passant, cela signifie que le très type d'un message ne pas en compte ENTRER du tout. Et cela explique en grande partie pourquoi, après l'exécution de l'orchestration, le résolveur Engine Business Rules ne détermine pas la transformation correcte.

Obtenir l'itinéraire

Le code suivant dans une forme d'expression au début de l'orchestration permet de récupérer l'étape actuelle Itinéraire:

// Retrieve the current itinerary step.
itinerary.Itinerary = Microsoft.Practices.ESB.Itinerary.ItineraryOMFactory.Create(InboundMessage);
itineraryStep.ItineraryStep = itinerary.Itinerary.GetItineraryStep(InboundMessage);

Préserver le contexte du message original

Ensuite, il faut préserver le contexte du message d'origine (pour la plupart) à chaque étape de l'orchestration. Ceci est d'une importance particulière en ayant plusieurs formes de construction intermédiaire dans l'orchestration pour mener à bien le scénario spécifique à portée de main.

OutboundMessage(*) = SourceMessage(*)

Notez que je l'ai écrit « pour la plupart » dans la phrase ci-dessus. En fait, comme nous le verrons dans une minute, le type de la nécessité de message résultant d'être présent dans le contexte à la fin de l'orchestration. Très probablement, ce sera un type différent que le message entrant d'origine. Et puisque l'affectation à la lecture seule BTS.MessageType la propriété est impossible, cela peut être assez difficile à obtenir parfois.

Vous pourriez avoir recours à exécuter un pipeline personnalisé dans l'orchestration ou d'autres techniques exotiques pour que ce soit le cas. La plupart du temps, cependant, la syntaxe indiquée ci-dessus devrait fonctionner.

Faire progresser l'itinéraire

Le code suivant très simple ne doit pas oublier à la fin de l'orchestration:

itinerary.Itinerary.Advance(OutboundMessage, itineraryStep.ItineraryStep);

La promotion de propriétés de contexte

Le documentation ne explicitent tout à fait Cleary quelles mesures exactes doivent être suivies, ou même si les propriétés doivent être promues d'une telle orchestration, mais en regardant les échantillons fournis sous forme de code source, on peut constater que les propriétés suivantes participent au mécanisme de résolution:

Promotion propriétés http://public.blu.livefilestore.com/y1pLURN1zH2vdRuLcF5yyAiHZQQ9rkdlrqG-QH01Nn8hEY5zH1W9TjjtNc0Z9421eFC2gUVG-Srs2-NdcliI3XD1w / orchestration_service_promoting_properties.png? Psid = 1

Toutefois, dans le scénario décrit dans cet article c'est certainement pas assez.

Pour connaître les règles basées sur le contexte au travail après l'orchestration, la nécessité de la propriété BTS.MessageType à promouvoir ainsi. Ceci peut être facilement réalisé en initialisant une corrélation sur la forme d'envoi à la fin de l'orchestration.

Type de message corrélation http://public.blu.livefilestore.com/y1pQb-dkmbNBcur7CwdyudiIE9EMKGnZ0LoGuFpfDLseAWsiUz9C1EC1ZR5pn0gI4tgr3syEN2y-cfPB9EgEzlgtA/message_type_correlation.png?psid=1

Et ça marche!

Promouvoir le type de message dans le contexte du message résultant était ce qui manquait dans ma tentative originale. Une fois que cela a été identifié, l'itinéraire a fonctionné comme un charme!

Règle Firing Connexion http: / /public.blu.livefilestore.com/y1pGVViJM7SFbopcnYODHkqGUbkgS1RQR8a7ASVsNVDu8Krdhb_Vyj4PugbMPSFcfMEZ1P_3a7It0QQpXdF_dnvDg/rule_firing_log.png?psid=1

Bien que la solution peut sembler évidente après le fait, il me que aidé si je l'avais su plus tôt. J'espère que ce poste aidera ceux qui touchent le même problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top