#binding #biztalk #orchestration
#привязка #biztalk #оркестровка
Вопрос:
У меня оркестровка с прямым логическим портом. Назовем это «O1» O1 подписывается на сообщение типа «A» (указанное в свойстве filter порта приема)
Когда O1 получает сообщение типа «A», он ожидает некоторого пользовательского ввода перед завершением. (Здесь присутствует некоторая корреляция)
Пока все хорошо…
У меня есть вторая оркестровка «O2», которая создает и отправляет сообщение типа «A» в окно сообщения.
Когда это происходит, я получаю много экземпляров запуска O1. Все, о чем я могу думать, это то, что пока существует экземпляр O1, сообщение по-прежнему доступно в окне сообщений для использования подписчиками. Итак, я буду постоянно получать экземпляры оркестровки.
Когда сообщение обрабатывается оркестровкой, остается ли оно в окне сообщения до завершения?
Был бы очень признателен, если бы кто-нибудь мог объяснить, что происходит и чего мне не хватает!
Ответ №1:
Когда сообщение обрабатывается оркестровкой, остается ли оно в окне сообщения до завершения?
Нет. На самом деле сообщение находится в окне сообщения, но оно помечено как активное. Поэтому никакой другой процесс не будет его использовать. Возможно, O1 создает сообщения типа A, чтобы оно повторно активировалось.
Посмотрите на эту статью с советами и хитростями:
Теперь самое интересное. Распространенной ошибкой с портами с прямой привязкой, особенно с различными окнами сообщений, является создание бесконечного цикла. Представьте себе простую оркестровку, состоящую всего из двух фигур: формы приема Activate = True (с прямой привязкой, конечно) и формы отправки, которая просто пересылает сообщение на ФАЙЛОВЫЙ порт. Когда эта оркестровка отправляет сообщение, куда оно направляется? Как всегда, сначала в окно сообщения. Всякий раз, когда сообщение поступает в окно сообщения, BizTalk выполняет поиск любых соответствующих подписок. И чем это сообщение будет отличаться от сообщения, которое активировало оркестровку в первую очередь? Этого не произойдет, поэтому BizTalk с радостью запустит другой экземпляр вашей оркестровки для его обработки и так далее, пока у вас не закончится память.
Комментарии:
1. большое спасибо — это ссылка, которую я пропустил. Имеет смысл, как только вы узнаете! еще раз, большое спасибо.
2. Чтобы «повторно использовать» сообщение A последовательно между обеими вашими оркестровками, вам необходимо добавить дополнительный фильтр. Вы можете либо добавить некоторый тип поля состояния в свою схему сообщений «A» и продвигать это, либо иным образом использовать свойство контекста для сообщения — например, см. blogs.msdn.com/b/dhtoran/archive/2005/07/07/436395.aspx
3. Что я в конечном итоге сделал, как было предложено в статье, так это убедиться, что в моей подписке я отфильтровал все сообщения типа A, которые пришли из моей оркестровки подписки. Это устранило цикл. Это устранило проблему!
4. еще один хороший способ, на который я наткнулся: blogs.msdn.com/b/kevin_lam/archive/2006/04/25/583490.aspx