Как подписаться на сообщения, созданные в оркестровке BizTalk?

У меня есть оркестровка, которая принимает сообщение. Целевое пространство имен — «http://microsoft.com/HealthCare/HL7/2X, а корневой элемент "ORU_R01_23_GLO_DEF"

В оркестровке я сопоставляю сообщение с промежуточным типом сообщения в форме конструкции. Целевое пространство имен — «http://mycompany.com/myapplication», а корневой элемент — «MyMessage». Затем сообщение «MyMessage» дополнительно сопоставляется, а затем отправляется в веб-службу с использованием логического порта отправки в оркестровке. Затем порт отправки WCF привязывается к оркестровке, и все работает нормально. Все работает так, как ожидалось.

Без изменения оркестровки я хочу создать порт отправки, который подписывается на промежуточное сообщение «MyMessage» и записывает его в файл. Для этого я создал порт отправки с фильтром BTS.MessageType = http://mycompany.com/myapplication#MyMessage.

Несмотря на то, что сообщения проходят через оркестровку, мой порт отправки не принимает сообщение. Это неправильный фильтр для использования?


person Jeremy    schedule 21.03.2013    source источник


Ответы (2)


Вы пытаетесь подписаться на сообщение «MyMessage» или на то же сообщение, которое отправляется на логический порт отправки, связанный с физическим портом отправки WCF?

Вы заявили, что:

Затем сообщение «MyMessage» дополнительно сопоставляется, а затем отправляется в веб-службу с использованием логического порта отправки в оркестровке. Затем порт отправки WCF привязывается к оркестровке, и все работает нормально.

Сообщение не опубликовано в MsgBox

Из того, что вы описали, я бы предположил, что у вас нет комбинации формы отправки / логического порта отправки в вашей оркестровке для сообщения «MyMessage», поэтому вы не можете вручную подписаться на этот тип сообщения в фильтре порта отправки. . Тот факт, что вы не упомянули сообщение «Failed Routing Report», также предполагает, что это так: этот тип сообщения генерируется, когда не удается найти подписку для сообщения, которое должно быть опубликовано в MsgBox.

Захват 'MessageType' сообщения

Однако, если вам нужно захватить копию сообщения, которое вы отправляете через порт отправки WCF, вам нужно будет определить его MessageType и использовать это во второй подписке на порт отправки. который записывает сообщение в файл.

Если вы не уверены, какой MessageType использовать, есть простой способ определить эту информацию:

  1. Остановить (не удалить из списка) порт отправки WCF
  2. Отправьте сообщение через оркестрацию как обычно — сообщение будет помечено как «Приостановлено для возобновления» в консоли администратора BizTalk на порте отправки WCF.
  3. Откройте сообщение в консоли администратора BizTalk и просмотрите его «Контекст сообщения»; в контексте сообщения вы увидите его свойство «MessageType», которое затем можно использовать, чтобы понять, какой фильтр подписки использовать.
  4. Запустите порт отправки WCF, чтобы сбросить сообщение.

В качестве альтернативы, если вы не хотите менять свою оркестровку, вы можете попробовать архивировать свое сообщение, когда оно проходит через конвейер отправки в (исходном) порте отправки WCF — либо напишите свой собственный компонент архивации, либо используйте существующий коммерческий компонент. Используя компонент архивации таким образом, вы сэкономите на дополнительных расходах на подписку и связанное с этим обслуживание порта отправки.

Обновление:

Это очень похоже на то, что OP не отправляет промежуточное сообщение в окно сообщений из своей оркестровки (см. комментарии). Подписка на сообщения будет работать только тогда, когда сообщение опубликовано в окне сообщений. В этом случае рассматриваемое сообщение («Сообщение B») является промежуточным сообщением, которое существует только в контексте и времени существования оркестровка. OP должен отправить сообщение на порт прямой связи в Оркестрации, чтобы разрешить подписку на сообщение через порт отправки.

person Nick Heppleston    schedule 22.03.2013
comment
Я урежу оркестровку. Приходит сообщение A. Оно сопоставляется с новым сообщением B, которое затем сопоставляется с новым сообщением C. Сообщение C отправляется на двусторонний порт отправки WCF. Я могу подписаться на сообщение C, а также на ответ от порта отправки WCF. На что я не могу подписаться, так это на сообщение B. Сообщение B — это только промежуточное сообщение, используемое оркестровкой, чтобы сделать карты более простыми. В конечном счете, интеграция заботится только о сообщениях A и C, но с точки зрения диагностики я хотел бы подписаться на сообщение B, когда мне это нужно. - person Jeremy; 23.03.2013
comment
Джереми, похоже, вы не отправляете сообщение B в окно сообщений, чтобы активировать подписку на вашем порту отправки. Сообщение B будет жить только в контексте оркестровки и не будет опубликовано в окне сообщения. Поэтому вам необходимо отправить сообщение B на логический порт отправки, настроенный как Direct Bound. - person Nick Heppleston; 23.03.2013
comment
Думаю, теперь я понимаю. Я думал, что даже если сообщение было просто создано (а не отправлено из порта отправки из оркестровки), оно попадает в окно сообщений и на него можно подписаться. Однако это не так, он попадает в окно сообщения только в том случае, если он проходит через логический порт отправки в оркестровке. - person Jeremy; 26.03.2013
comment
Правильный. Я предполагаю, что аналогией будет объект С#, который не сериализован и записан на диск, будет потерян при завершении работы приложения. - person Nick Heppleston; 27.03.2013

Проверьте конвейеры порта отправки. Должен XML, а не сквозной.

person Douglas Mello    schedule 18.06.2015