Использование 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);
и устанавливает тип транспорта мыло:
pipelineContext.Write("TransportType",
"http://schemas.microsoft.biztalk.practices.esb.com/itinerary", "SOAP");
Во всех других отношениях поставщик адаптера почти идентичен примеру, показанному в приведенной выше ссылке, за исключением очевидного изменения с SMTP на SOAP.
Сборка поставщика адаптера подписывается, GACed и добавляется в esb.config.
Провайдер адаптера вызывается из маршрута, который вызывает только службу, а затем возвращает ответ. Мы тестируем маршрут с помощью тестового клиента маршрута, который поставляется с набором инструментов. Регистрация событий в настраиваемом адаптере показывает, что вызывается код адаптера. Проблема в том, что сообщение не направляется на прокси-сервер службы. Средство просмотра событий выдает следующую ошибку:
Подсистеме обмена сообщениями не удалось обработать сообщение, отправленное адаптером: URL-адрес источника SOAP: /ESB.ItineraryServices.Response/ProcessItinerary.asmx. Подробности: опубликованное сообщение не может быть маршрутизировано, потому что не найдены подписчики. Эта ошибка возникает, если подписывающаяся оркестровка или порт отправки не были включены в список, или если некоторые свойства сообщения, необходимые для оценки подписки, не были повышены. Используйте консоль администрирования Biztalk для устранения этой ошибки.
Исследование приостановленных экземпляров службы в обзоре группы показывает две вещи: значения для имени сборки, имени типа и имени метода установлены правильно. Тело сообщения отсутствует. Мы пробовали настроить конвейеры отправки и получения на порту отправки как XMLTransmit / XMLReceive и ItinerarySendPassthrough / PassthroughReceive, и это не имеет никакого значения.
Есть ли что-то очевидное, что мы могли упустить? Вы должны явно передать тело сообщения? Если да, то как?
РЕДАКТИРОВАТЬ:
После запрос с форума BizTalk ESB Toolkit Я публикую снимки экрана с маршрутом, контекстом и фильтрами портов отправки.
Маршрут, Контекст, Фильтры портов.
Большое спасибо, Найджел.