我正在尝试通过调用接收管道(类似于提供的 ItinerarySelectReceiveXml 接收端口)从编排内部执行动态行程路由,以解析给定消息的行程并将其发送到直接绑定端口以进行 ESB 路由。该设置类似于 ComposedMessageProcessor BizTalk 示例。
据我所知,我的接收管道与 ItinerarySelectReceiveXml 完全一样,除了在 ESB 行程选择管道组件(在 ResolveParty 阶段)我已经硬编码了连接字符串和 ItineraryFactName(例如 BRI:\policy=MyResolveItineraryRule;useMsg=true ;recognizeMessageFormat=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.Itinerary.PipelineComponents.ItinerarySelector 之后得到了 Microsoft.Practices.ESB.PipelineComponents.Dispatcher 的异常(在解决方阶段)
文档声明 ESB 行程选择器管道组件应使用以下属性设置行程的 Microsoft BizTalk Server 段:correlationToken、reqRespTransmitPipelineID、interchangeId、receiveInstanceId、epmRRCorrelationToken。
异常如下所示:
值不能为空。参数名称:interchangeId
来源:Microsoft.Practices.ESB.PipelineComponents.Dispatcher
方法:Microsoft.BizTalk.Message.Interop.IBaseMessage 执行(Microsoft.BizTalk.Component.Interop.IPipelineContext, Microsoft.BizTalk.Message.Interop.IBaseMessage)
错误来源:Microsoft.Practices.ESB.Itinerary.OM.V1
错误目标站点: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.SubmitToBAM(Itinerary itinerary, IItineraryStep步骤,IPipelineContext 上下文,IBaseMessage msg) 在 Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1.<>c__DisplayClassa.b__8() 在 Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1.AdvanceByOrder(ItineraryMessageDirection messageDirection, Microsoft.Practices.ESB.Itinerary.OM.V1.ItineraryV1.Advance 中的字符串 serviceInstanceId、IItineraryStep 步骤、Action submitToBam、Boolean advanceStep)(IBaseMessage 消息、IPipelineContext 上下文、IItineraryStep 步骤、Boolean advanceStep)在 Microsoft.Practices.ESB.Itinerary。 OM.V1.行程V1。在 Microsoft.Practices.ESB.PipelineComponents.Dispatcher.Execute(IPipelineContext 上下文,IBaseMessage 消息)的高级(IBaseMessage 消息,IPipelineContext 上下文,IItineraryStep 步骤)
任何帮助,将不胜感激。
ps 我也已在此处将这个问题发布到 ESB 工具包表单http://social.msdn.microsoft.com/Forums/en/biztalkesb/thread/28c5befe-4c7f-4dc1-a5e7-8fe5b3ec1c75