[BizTalk] Parallel shape in Loop slechts eenmaal uitgevoerd

Pagina: 1
Acties:

Onderwerpen


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:15
Bij het implementeren van een orchestration die meerdere berichten uit moet sturen naar een ketenpartner, ben ik tegen een nogal vaag probleem aangelopen.

Voor het versturen van meerdere berichten maak ik gebruik van een Loop shape. Daarbinnen zit een Parallel shape met twee branches: één om de berichten te versturen, de andere implementeert een timeout. Als één van beide branches klaar is, wordt een exception gegooid en gevangen om de resultaten uit te lezen (zo wordt de andere branch ook gestopt). Dit wordt zo voor alle te versturen requests gedaan.

Een overzicht zie je in onderstaande plaat:
Afbeeldingslocatie: http://img263.imageshack.us/img263/8594/probleemparallelinloop.png

In de eerste iteratie verloopt alles goed, op punt A wordt gelogd dat parallelle executie is gestart, zowel B1 als B2 worden gelogd, de linkertak wordt volledig uitgevoerd waarna een exception wordt gegooid, die gevangen wordt in het handler met label Timeout. Daar wordt het tussentijdse resultaat bewaard, punt C wordt gelogd ("bericht 1 van 2 verwerkt") en de counter wordt opgehoogd.

In de tweede iteratie wordt op punt A netjes gelogd, maar B1 en B2 verschijnen niet in de log. Ook de overige inhoud van beide branches wordt niet uitgevoerd. Ook beide exception handlers worden niet uitgevoerd. Daarna wordt punt C wel gelogd ("bericht 2 van 2 verwerkt") en loopt de orchestration verder af.

Kan iemand hier verklaren hoe het komt dat bij de tweede iteratie de volledige Parallel shape wordt overgeslagen? Op de shape zitten zo goed als geen properties die zulk gedrag kunnen verklaren en je kunt er verder ook geen condities of iets dergelijks op zetten. Ook als ik de orchestration debugger gebruik, dan springt 'ie over de complete Parallel shape heen.

Het lijkt er sterk op dat het een bug is in BizTalk, maar ik heb er via google niets over kunnen vinden. Zoekresultaten op een query met een Parallel shape i.c.m. een Loop leveren hits op over synchronisatie van variabelen etc.

Misschien handig om nog te vermelden dat er helemaal niets stuk lijkt te gaan: geen suspended orchestration, geen meldingen in het Event Log, niets.

  • Greyfox
  • Registratie: Januari 2001
  • Laatst online: 11-09 13:40

Greyfox

MSX rulez

Een verklaring voor dit gedrag heb ik niet en is ook moeilijk van afstand te bepalen, misschien dat het iets met het gooien van die exceptie te maken heeft.

Ik snap alleen niet waarom je een parallel shape gebruikt.
Je weet dat die alleen door gaat als alle takken klaar zijn?
Lijkt mij logischer als je daarvoor een listen shape gebruikt om een time-out te genereren, ipv daar een exception voor te gooien.

MSX 2 rulez more


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:15
Je hebt inderdaad een punt met die Listen shape, al zal ik hier wel even na moeten vragen of het met een specifieke reden zo is gebouwd. De functionaliteit met de timeout bestond al, alleen ondersteunde het slechts het versturen van één bericht. Het principe heeft zich dus eigenlijk wel bewezen, al lijkt het inderdaad alsof we die Listen constructie hier hebben herbouwd met andere componenten. ;)