Question

I have an orchestration which exposes a web service, it examines the source of the message received executes some branching logic based on that and calls one of a set of 'service' orchestrations (which resides in a different Application). These service orchestrations perform some update on my message then send it back to the routing orchestration when complete. The routing application then sends an appropriate web service response. i.e the end to end process is all meant to be synchronous.

My intention was to have a direct bound send/receive port on my 'routing' orchestration and a linked receive/send port on the 'service' orchestrations to achieve the blocking, but I'm having trouble making this work.

I've tried using correlations and filter expressions but I'm consistently seeing the 'Multiple Subscribers error' when the Service orchestration tries to send back its response.

I've ensured that no other orchestrations/ports are using my Schema (to the point of creating a brand new one to be sure).

Tearing my hair out over this a bit, It seems like something which should be relatively straightforward to accomplish.

(p.s I'm leaning towards having the service orchestrations expose a web service and calling that, but it seems like a long way around for something which is always going to reside on the same machine).

Was it helpful?

Solution

A common way to ensure that messages are seen as "different" by biztalk so that this kind of issues don't happen is to use a context-only property that gets set to different values before and after, and then use correlations and filter expression to make sure that the messages match only a specific instance of the message coming from a specific location at a time.

That way, even if the message types are the same, the subscriptions won't really have the same predicates.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top