本节包含一组问题和答案,旨在帮助您解决协调过程中的运行时问题。
为什么在发送到刚刚由父级启动的子编排时会出现间歇性订阅错误?
订阅错误“找不到订阅”是竞争条件的结果。 当一个进程的结果取决于进程发生的特定顺序时,会发生竞争条件。 在这种情况下,当子协调流程尚未及时启动以接收父级发送的消息时,就会发生这种情况。
为了解决这个问题,子业务流程可以在启动并准备好接收消息后,将信息发送回父级。 这样,启动该流程的父编排就会在发送消息之前知道存在一个接收方。
为什么在将动态发送端口附加到逻辑端口时收到错误?
动态端口未设计为继承分配给该端口的所有属性和特征。 动态端口仅获取地址;它不会继承与逻辑端口关联的其他信息。
例如,如果将动态发送端口附加到具有传递通知 = 传输的逻辑端口,运行时将不会传递传递通知。 如果端口实际是以静态方式设置的,那么 XLANGs 运行时环境才会侦听传递通知。
注释
在 XLANG 中,端口的行为将仅在静态配置时运行。
在部署包含自定义组件的协调过程后尝试运行应用程序时,为什么会收到错误提示“找不到文件或程序集名称或其依赖项之一”?
此错误通常意味着 BizTalk 业务流程引擎找不到自定义组件。 必须在承载应用程序的计算机的全局程序集缓存中安装 BizTalk 应用程序中包含的所有程序集。
通过调度将文档提交到 Web 服务时,发生“AssemblyName 上下文属性无效”错误
问题
通过编排将文档提交到 Web 服务会导致“AssemblyName 上下文属性无效”错误。
原因
BizTalk 应用程序最初是使用“消息传送”方法设计的,无需干预业务流程。 这种类型的解决方案使用发送端口筛选器链接接收端口和发送端口,以便文档在收到后传递到发送端口。 后来,解决方案被修改为包含绑定到发送端口的编排。
决议
删除发送端口上的筛选器。 如果将筛选器应用到绑定到业务流程的发送端口,消息通常会绕过业务流程并导致上下文属性错误。
在编排中处理多部分 MIME 消息时发生“WrongBodyPartException”异常。
问题
在业务流程中接收多部分的 MIME 消息会导致 WrongBodyPartException 异常。
原因
如果部分的顺序未正确指定,或者消息不符合指定的部件位置,则可能会出现此错误。 例如,如果指定第三部分是正文部分,但消息到达时标头部分位于第三位置。
决议
验证身体部件索引设置是否正确,并确保通过适配器到达的所有消息都与该设置一致。 可以通过停止业务流程来检查 MIME 消息在业务流程中失败的内容(但保留其登记):这将强制发布消息,以便你可以使用管理控制台检查它,并验证部件的顺序。
找不到多部分 MIME 消息部件
问题
尝试检索索引值大于 0 的 MIME 消息部件会导致 BizTalk Server 运行时引发类似于“找不到索引 = <value> 的多部分消息”的错误。
原因
此错误的最常见原因是:
MIME 消息的部件数少于预期。
无法完全分析 MIME 消息。
决议
你可以通过确保代码仅检索消息源中预期范围内的消息部分来解决此问题。 在分析问题的情况下,应验证原始 MIME 消息在结构上是否健全且构造正确。 如果偶尔需要分析问题,请确保业务流程具有适当的异常处理程序。
使用动态发送端口发送时收到“文件发送适配器无法打开要写入的文件”错误
问题
使用动态发送端口发送时,BizTalk Server 事件日志中出现“文件发送适配器无法打开文件 <文件名> 以写入”错误。
当在业务流程表达式中定义BTS.OutBoundTransportLocation属性并指定文件传输时,就会出现此问题,例如以下表达式将在运行时导致此错误:
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
-或-
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
原因
出现此问题的原因是,在运行时,业务流程引擎将从指定的 URL 中删除文本“file://”。 因此,使用上面的示例,将“file:///c:/test/out”评估为 \c:\test\out,并将“file://mymachine/test/out”评估为 mymachine\test\out。
决议
在表达式中指定BTS.OutBoundTransportLocation属性的 URL 时,根据需要添加或删除“/”字符。 使用上述示例中的 BTS.OutBoundTransportLocation 属性应定义为“file://c:/test/out”,这将解析为 c:\test\out 或 “file:////mymachine/test/out”,这将解析为 \\mymachine\test\out。