Я пытаюсь выполнить динамическую маршрутизацию маршрута из оркестровки, вызывая конвейер приема, очень похожий на предоставленный порт ItinerarySelectReceiveXml, чтобы разрешить маршрут для данного сообщения и отправить его на прямой связанный порт для маршрутизации ESB. Настройка аналогична образцу ComposedMessageProcessor BizTalk.
Мой конвейер приема точно такой же, как ItinerarySelectReceiveXml, насколько я могу судить, за исключением компонента конвейера ESB Itinerary Select (на этапе ResolveParty). Я жестко запрограммировал строку подключения и ItineraryFactName (например, BRI: \ policy = MyResolveItineraryRule; useMsg = true ; acceptMessageFormat = true; и Resolver.Itinerary), так что мне не нужно проделывать трюки с адаптерами обратной связи и нести дополнительные посещения окна сообщений.
Код для вызова конвейера приема из формы выражения выглядит следующим образом:
// Первое сообщение, которое я хочу маршрутизировать, - это просто узел моего входящего сообщения
strXPath = "/*[local-name()='BeginConversationMessage' and namespace-uri()='http://MyCompany.BeginConversationMessage.v001']/*[local-name()='BeginConversationMessage' and namespace-uri()='http://MyCompany.BeginConversationMessage.v001']";
BeginConversationMessage = xpath(InboundMsg, strXPath);
RcvPipeOutput = Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteReceivePipeline(typeof(MyCompany.Itinerary_GenericSelector), BeginConversationMessage);
Это идет довольно хорошо, я вижу, что правильный маршрут для типа сообщения определяется с помощью SQL Profiler, и я знаю, что маршрут хорош, потому что я использую его для этого типа сообщения с общим маршрутом по съезду.
Но я получаю исключение из Microsoft.Practices.ESB.PipelineComponents.Dispatcher, которое у меня есть сразу после Microsoft.Practices.ESB.Itinerary.PipelineComponents.ItinerarySelector (на этапе разрешения)
В документации указано, что компонент конвейера выбора маршрута ESB должен установить сегмент Microsoft BizTalk Server маршрута, используя следующие свойства: correlationToken, reqRespTransmitPipelineID, interchangeId, receiveInstanceId, epmRRCorrelationToken.
Исключение выглядит так:
Значение не может быть нулевым. Имя параметра: interchangeId
Источник: Microsoft.Practices.ESB.PipelineComponents.Dispatcher.
Метод: Microsoft.BizTalk.Message.Interop.IBaseMessage Execute (Microsoft.BizTalk.Component.Interop.IPipelineContext, Microsoft.BizTalk.Message.Interop.IBaseMessage)
Источник ошибки: Microsoft.Practices.ESB.Itinerary.OM.V1
Ошибка TargetSite: System.Object [] GetItineraryDataForBAM (Microsoft.Practices.ESB.Itinerary.OM.V1.Itinerary, Microsoft.Practices.ESB.Itinerary.IItineraryStep, System.String)
Ошибка StackTrace: в Microsoft.Practices.ESB.Itinerary.OM.V1.BAMItineraryProcess.GetItineraryDataForBAM (Маршрут маршрута, шаг IItineraryStep, String interchangeId) в Microsoft.Practices.ESB.Itinerary.OM.V1.BAMItineraryTineraryProcess. step, контекст IPipelineContext, сообщение IBaseMessage) в Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1. ‹> c__DisplayClassa.b__8 () в Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1.AdvanceByOressage (ItineraryV1.AdvanceByOressage, ItineraryMessage String serviceInstanceId, IItineraryStep step, Action submitToBam, Boolean advanceStep) в Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1.Advance (сообщение IBaseMessage, контекст IPipelineContext, шаг IItineraryStep, логическое advanceStepices.ES) в Microsoft.Practices. OM.V1.ItineraryV1.Advance (сообщение IBaseMessage, контекст IPipelineContext, шаг IItineraryStep) в Microsoft.Practices.ESB.PipelineComponents.Dispatcher.Execute (IPipelineContext контекст, сообщение IBaseMessage)
Любая помощь будет оценена.
p.s. Я также разместил этот вопрос в форме ESB Toolkit здесь http://social.msdn.microsoft.com/Forums/en/biztalkesb/thread/28c5befe-4c7f-4dc1-a5e7-8fe5b3ec1c75