BizTalk: подписки на множественные запросы и ответы

У нас есть хранимая процедура, которая регистрирует статус в нашей базе данных. Для существующего приложения пользователи решили, что они хотят записать статус на другой сервер.

  • Мы продублировали таблицу и хранимую процедуру на новом сервере.
  • Я создал новый порт отправки wcf-custom и настроил его для использования новой базы данных.
  • Я изменил привязку оркестровки, чтобы использовать новый порт отправки.

Теперь я получаю следующую ошибку:

The message found multiple request response subscriptions. A message can only be routed to a single request response subscription.

Я считаю, что хотя привязка оркестрации указывает, какой порт использовать, BizTalk также находит старое определение порта отправки.

Как работает привязка оркестровки? Есть идеи, почему это запутано?

(Исходный порт отправки используется другими приложениями, поэтому я не могу его удалить или отредактировать)


person Jay    schedule 08.01.2014    source источник


Ответы (3)


Когда вы привязываете Orchestration к порту, любое сообщение для этого порта, публикуемое Orchestration, будет иметь свойство контекста SPTransportID, установленное на GUID порта. Когда вы добавляете фильтр к порту, он добавляется как ИЛИ. Вы можете увидеть это, перейдя в «Новый запрос», «Поиск подписок» и найдя нужный порт. Например, вы увидите такую ​​подписку

http: //schemas.microsoft.com/BizTalk/2003/system-properties.SPTransportID == {E1293B10-2763-4600-B795-A0C4B4D5E6EC} 
   Or 
http: //schemas.microsoft.com/BizTalk/2003/system-properties.ReceivePortName == ExamplePort 

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

person Dijkgraaf    schedule 08.01.2014
comment
Спасибо за прекрасное объяснение. Я скоро его протестирую. - person Jay; 09.01.2014
comment
Ух ты. Не ожидал такого поведения. Большое спасибо - person Jay; 10.01.2014

Похоже, что либо старый порт все еще включен (это может быть просто остановлено) или, возможно, вам нужно перезапустить BizTalk хосты.

person StuartLC    schedule 08.01.2014
comment
Старый порт по-прежнему требуется для других приложений BizTalk. Я все же попробую перезапустить хосты. Хорошая идея - person Jay; 08.01.2014
comment
Это может быть проблемой - в соответствии с ошибкой сообщение request response не может иметь подписки на несколько портов, так как в противном случае запускающий орх потенциально может получить более одного ответа, возможно, конфликтующий. Можете ли вы сделать подписки на 2 порта взаимоисключающими, например с фильтрами свойств контекста? - person StuartLC; 08.01.2014
comment
Я согласен. Так почему же два разных порта, один из которых не привязан к этой оркестровке, считаются возможными подписчиками? По каким критериям он определяет, какой порт используется? Это должно быть что-то помимо привязки. - person Jay; 08.01.2014
comment
Возможно, вы использовали прямую привязку хотя бы к одному из них, с фильтром, основанным только на message type? - person StuartLC; 08.01.2014
comment
У него есть критерии фильтрации по типу сообщения. Это не порт с прямым подключением к почтовому ящику. Я перезапустил хост-инстансы, и мы собираемся перезапустить работу. Мне интересно, создал ли он новый порт отправки, но поскольку я не отбрасывал экземпляры, он все еще содержит ссылку на другой. - person Jay; 08.01.2014
comment
Перезапуск хостов не помог решить проблему :( - person Jay; 08.01.2014
comment
Не совсем очевидно, что делать, чтобы исправить проблему, поэтому я просто собираюсь обойти ее. Я перепишу одно приложение, чтобы не было никакого дублирования. - person Jay; 09.01.2014
comment
Почему у вас есть критерии фильтрации по типу сообщения, когда вы связали Orchestration с портом? То, что вы сделали, добавив фильтр, как сообщения, привязанные к порту, так и любые другие сообщения, опубликованные с этим типом сообщений, также будут отправляться на этот порт. Если к порту привязаны другие оркестровки приложений, удалите фильтр, и все заработает. В противном случае вам придется обновить фильтр, чтобы исключить те сообщения, которые должны поступать на новый порт. - person Dijkgraaf; 09.01.2014

Чтобы выполнить то, что вы описываете, вам не нужно создавать новый порт отправки.

Просто измените URI существующего порта отправки, чтобы он указывал на новую базу данных.

person Johns-305    schedule 08.01.2014
comment
Старый порт по-прежнему требуется для других приложений BizTalk. - person Jay; 08.01.2014