Создание пользовательского адаптера SOAP для BizTalk ESB Toolkit 2.0

StackOverflow https://stackoverflow.com/questions/1178604

  •  19-09-2019
  •  | 
  •  

Вопрос

Использование BizTalk ESB Toolkit 2.0

Мы работаем над проектом, в котором нам нужно вызвать прокси-сервер для веб-службы, представляющей собой DLL.У нас нет проблем с выполнением этого с помощью оркестровки, поскольку вы можете использовать статический порт и настроить его на использование адаптера SOAP с настройкой веб-службы, указывающей на сборку в интерфейсе администратора BizTalk.Однако в маршруте, похоже, нет очевидного способа сделать это, поскольку динамические порты не имеют возможности использовать адаптер SOAP.

Есть веская причина, по которой мы хотим это сделать, не волнуйтесь.

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

Мы последовали показанному (старому) примеру здесь:

Поставщик пользовательского адаптера наследует от BaseAdapterProvider и переопределяет метод SetEndPoint(Dictionary, IBaseMessageContext).

Метод извлекает имя сборки, имя типа и имя метода, которые передаются через словарь преобразователя, а затем записывает их в контекст конвейера:

pipelineContext.Write("TypeName", 
    "http://schemas.microsoft.com/BizTalk/2003/soap-properties", typeName);
pipelineContext.Write("MethodName", 
   "http://schemas.microsoft.com/BizTalk/2003/soap-properties", action);
pipelineContext.Write("AssemblyName", 
    "http://schemas.microsoft.com/BizTalk/2003/soap-properties", assembly);

и устанавливает тип транспортировки на soap:

pipelineContext.Write("TransportType",
    "http://schemas.microsoft.biztalk.practices.esb.com/itinerary", "SOAP");

Во всех других отношениях поставщик адаптера почти идентичен примеру, показанному по ссылке выше, за исключением очевидного перехода с SMTP на SOAP.

Сборка поставщика адаптера подписана, настроена и добавлена в esb.config.

Поставщик адаптера вызывается из маршрута, который только вызывает службу, а затем возвращает ответ.Мы тестируем маршрут с помощью клиента тестирования маршрута, который поставляется вместе с инструментарием.Ведение журнала событий в пользовательском адаптере показывает, что вызывается код адаптера.Проблема в том, что сообщение не перенаправляется на прокси-сервер службы.Средство просмотра событий выдает следующую ошибку:

Механизму обмена сообщениями не удалось обработать сообщение, отправленное адаптером: SOAP Источник URL:/ESB.Маршрутные службы.Ответ/ProcessItinerary.asmx.Подробности: Опубликованное сообщение могло не быть перенаправлено, поскольку не было найдено подписчиков .Эта ошибка возникает, если порт согласования подписки или отправки не был указан, или если некоторые из свойств сообщения, необходимых для оценки подписки, не были повышены.Пожалуйста, используйте Biztalk Консоль администрирования для устранения неполадок этот сбой.

Исследование приостановленных служб в обзоре группы показывает две вещи:Значения для имени сборки, имени типа и имени метода заданы правильно.Текст сообщения отсутствует.Мы попытались настроить конвейеры отправки и получения на порту отправки как XMLTransmit / XMLReceive, так и initiarysendpassthrough / PassthroughReceive, и это не имеет никакого значения.

Есть ли что-то очевидное, что мы, возможно, упустили?Нужно ли вам явно передавать текст сообщения через?Если да, то каким образом?

Редактировать:

Следуя за запрос с форума BizTalk ESB Toolkit Я публикую снимки экрана маршрута, контекста и фильтров портов отправки.

Маршрут, Контекст, Фильтры портов.

Большое спасибо, Найджел.

Это было полезно?

Решение

прежде всего, я скажу, что вы пытаетесь перепроектировать решение.Разработка адаптера не является тривиальной, и есть различные вещи, которые вам необходимо принять во внимание.Разработка и развертывание адаптеров относятся к категории изменений платформы, которые влияют на всю вашу среду, поэтому, если вы не знакомы, вам не следует этого делать.Я бы порекомендовал вам выбрать какой-нибудь другой маршрут.На данный момент я лично недостаточно разбираюсь во внутренней части ESB, поэтому не смогу это прокомментировать.В худшем случае вам может быть лучше использовать .NET proxy dll непосредственно внутри вашей оркестровки (выражения или формы сообщения), а не создавать адаптер.Несмотря на то, что это не рекомендуемый подход, все же я считаю, что он лучше, чем подход пользовательского адаптера.

Другие советы

Семантически я не понимаю, почему решение, включающее адаптер WCF-BasicHtpp, не будет работать в вашем сценарии.В любом случае, я бы определенно попытался посмотреть, что происходит с адаптером WCF-basicHttp, и как только я получу рабочее решение, я бы переключился на пользовательский адаптер SOAP, если это действительно необходимо.

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

В противном случае сообщение фактически публикуется в окне сообщения, и, очевидно, для него нет подписчиков, отсюда и ошибка, с которой вы сталкиваетесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top