Если вы используете двусторонний порт отправки запроса / ответа в оркестровке вызывающего абонента для отправки сообщений в полезную оркестровку, то вы можете использовать корреляцию для маршрутизации соответствующих сообщений обратно в пользовательский узел вызывающего абонента.
Хитрость в том, что вам нужно будет изменить полезный орх (чтобы сделать его более полезным, конечно).
Если вы не можете / не можете контролировать, ожидают ли вызывающие абоненты ожидающего ответа ответа, вам нужно будет сделать входящий порт (запрос) односторонним портом. Затем оркестровка завершится отправкой на односторонний исходящий (ответный) порт.
Чтобы обеспечить правильную маршрутизацию сообщений, полученных от вызывающих абонентов с двусторонним вызовом / запросом-ответом, конструктивная форма исходящего сообщения внутри вашего полезного кода должна будет установить для следующих свойств сообщения значение true, используя форму назначения сообщения:
BTS.RouteDirectToTP
BTS.IsRequestResponse
Однако перед настройкой этих двух свойств также убедитесь, что вы сделали что-то вроде msgOut(*) f= msgIn(*);
в той же форме назначения сообщения, чтобы другие копии копировались. Если входящие и исходящие сообщения не совпадают, вам нужно вручную установить каждое из обязательных свойств, по одному за раз.
Эти свойства, конечно, в дополнение к двум вышеупомянутым, помогают гарантировать, что результат полезного орга будет правильно направлен вызывающей стороне. Они должны быть внутри вашего набора корреляций и:
BTS.CorrelationToken
BTS.EpmRRCorrelationToken
BTS.IsRequestResponse
BTS.ReqRespTransmitPipelineID
BTS.RouteDirectToTP
Однако я немного забегаю вперед, поскольку вы присваиваете набор корреляции для формы исходящей отправки, только если BTS.EpmRRCorrelationToken exists msgIn
. Это очень важно. Я использовал форму решения в оркестрации, причем решение основано на этой точной фразе. Если результат верен, то отправьте ранее построенное сообщение и назначьте корреляционный набор сверху как Инициализирующий корреляционный набор . Это заставит BizTalk направить сообщение обратно вызывающей стороне в качестве ожидаемого ответа.
Если результат решения был ложным, то вызывающая сторона оркестровки была односторонней. Вы по-прежнему, вероятно, захотите отправить результат (и просто попросите кого-нибудь подписаться на него). Вы даже можете использовать тот же порт отправки, что и для двусторонних ответов, просто , а не , назначьте набор корреляций.
Вы, конечно, захотите тщательно проверить это. Это работает для меня в одном сценарии, в котором я его использовал, но это не освобождает других от необходимости проявлять должную осмотрительность.