调试业务流程运行时错误

本部分包含可帮助您解决业务流程运行时问题的一系列问题与解答。

在发送到刚由父业务流程启动的子业务流程时,为什么会遇到间歇订阅错误?

订阅错误“找不到订阅”是由于争用情况造成的。 在进程结果依赖于执行进程所采用的特定顺序时,将发生争用情况。 在此情况下,如果子业务流程未及时启动以接收父业务流程发送的消息,将发生此争用情况。

为了避免这一问题发生,子业务流程可以在父业务流程已启动并且准备接收消息后,将消息发送回父业务流程。 这样,启动了它的父业务流程就会在发送消息前知道存在接收方。

在将某一动态发送端口附加到逻辑端口时,为什么会显示错误?

动态端口并没有设计为继承分配给它的所有端口属性和特性。 动态端口只获取地址,它并不继承与逻辑端口关联的其他信息。

例如,如果您将某一动态发送端口附加到某一逻辑端口且送达通知为“已传输”,则运行时将不会传递送达通知。 如果端口实际上是以静态方式配置的,XLANGs 运行时将只侦听送达通知。

注意

在 XLANGs 中,端口只是表现得像是用静态方式配置的。

在使用自定义组件部署业务流程后尝试运行应用程序时,为什么系统会显示错误消息“未找到文件或程序集名称或它的某个依赖项”?

此错误通常意味着 BizTalk 业务流程引擎无法定位自定义组件。 您必须在作为某一 BizTalk 应用程序宿主的计算机的全局程序集缓存中,安装该应用程序中包括的所有程序集。

在将文档通过业务流程提交到 Web Services 时,发生“AssemblyName 上下文属性无效”错误

问题

通过业务流程将文档提交到 Web Services 将导致“AssemblyName 上下文属性无效”错误。

原因

BizTalk 应用程序最初是使用“消息传送”方法设计的,没有涉及业务流程。 此类型的解决方案使用发送端口筛选器来链接接收端口和发送端口,以便文档在接收后传递到发送端口。 在后来,修改了该解决方案,从而包括了绑定到发送端口的业务流程。

解决方法

删除发送端口上的筛选器。 如果您将某一筛选器应用于绑定到某一业务流程的发送端口,则消息将常常会绕过该业务流程,从而导致上下文属性错误。

在业务流程中处理多部分 MIME 消息时,发生了“WrongBodyPartException”异常

问题

在业务流程中接收多部分 MIME 消息会导致 ErrorBodyPartException 异常。

原因

如果错误地指定了各部分的顺序或者消息与您已指定的部分位置不符,则可能会发生此错误。 例如,如果您指定第三个部分是正文部分,但消息到达时在第三个位置中却是标头部分。

解决方法

确认正文部分索引设置是正确的,然后确保通过适配器到达的所有消息都与该设置一致。 您可以通过停止业务流程(但保持它被登记),检查在业务流程内失败的 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 的 URL 时 。表达式中的 OutBoundTransportLocation 属性,根据需要添加或删除“/”字符。 使用 BTS 上面的示例 。OutBoundTransportLocation 属性应定义为“file://c:/test/out”,其计算结果为 c:\test\out 或“file:////mymachine/test/out”,其计算结果为 \\mymachine\test\out。