Exception handling BizTalk 2006 R2架构验证特定的错误消息,消息路由失败

Exception handling BizTalk 2006 R2架构验证特定的错误消息,消息路由失败,exception-handling,biztalk,biztalk2006r2,Exception Handling,Biztalk,Biztalk2006r2,我正在寻找一种方法来捕获BizTalk 2006 R2在接收端口无法解析它拾取的消息时引发的实际异常 例如,我有一个未正确创建的csv文件,比如说它缺少一个逗号,所以当BizTalk尝试确定消息类型时,它会出错。如果不使用失败的消息路由,则应用程序事件日志中有2个条目。其中一个有一个非常通用的错误描述,类似于“消息引擎在处理一个或多个入站消息时遇到错误”这样的描述。第二个条目有我要查找的内容。它将包含缺少逗号的位置的详细信息,类似于“查找时发现意外数据: ',' 正在分析的当前定义是POSTra

我正在寻找一种方法来捕获BizTalk 2006 R2在接收端口无法解析它拾取的消息时引发的实际异常

例如,我有一个未正确创建的csv文件,比如说它缺少一个逗号,所以当BizTalk尝试确定消息类型时,它会出错。如果不使用失败的消息路由,则应用程序事件日志中有2个条目。其中一个有一个非常通用的错误描述,类似于“消息引擎在处理一个或多个入站消息时遇到错误”这样的描述。第二个条目有我要查找的内容。它将包含缺少逗号的位置的详细信息,类似于“查找时发现意外数据: ',' 正在分析的当前定义是POSTrailer。发生错误的流偏移量是44443。发生错误的行号是244。发生错误的列是1。“

我已尝试使用BizTalk 2006 R2的ESB工具箱异常处理程序。使用失败消息路由及其异常处理框架,它捕获的错误描述是第一个通用错误描述

我看不到任何方法可以获得第二个更详细的错误描述。我假设biztalk消息传递引擎内部的某个地方会抛出此异常,该异常会被流程中稍高一点的某个对象捕获,该对象会抛出它自己的通用biztalk异常。我还假设更具体的错误描述包含在异常的内部异常中,该异常被路由到ESB toolkit,但是,据我所知,在我掌握它的时候,实际的异常对象已经被消息上下文所取代,它只不过是一堆名称/值对。错误描述现在是通用的,没有任何帮助,任何类似内部异常的东西都只是一个十六进制代码,这对我的最终用户来说毫无意义


我所发现的关于获取特定错误消息的所有内容都涉及从编排引发的异常。我不是在处理编排,而是在处理接收端口。我能找到的最接近的东西是。但即使我可以使用它创建一个自定义管道组件,这意味着我要么需要将该组件添加到每个现有的自定义管道中,要么创建一个新的组件来验证XML并使用它,而不是BizTalk附带的XMLRecieve或XMLSend管道。。。这也意味着捕获EDI生成的错误是不可能的。有人知道如何从BizTalk生成的错误消息中获取此更详细的错误描述吗?

我不确定是否有一个工具能够完全满足您的要求,但我有两个选择

1) 我非常确信SCOM可以抓住这些错误并提醒需要提醒的人。不过,我过去在这方面遇到过一些问题,所以这可能不是你的最佳选择

2) 对于基本的故障处理,您可以编写代码,在事件日志中查找来自BizTalk的任何警告或错误,并将其传递到下一行(我当前的客户机可以做到这一点-它不是非常优雅,但工作正常)


3) 如果您不需要业务流程,我建议您设置自定义管道,在正常操作的基础上实现错误处理/监控。然后,对于非关键消息,您仍然可以使用标准管道(减少开销/延迟),对于关键消息,您可以使用“GuarantedDeliveryPassthruppipeline”或“GuarantedDeliveryxmlTransmitPipeline”或其他任何东西。

为什么这会流向您的最终用户?我工作过的每个组织都将此问题留给BizTalk管理员(通常是系统管理员或BizTalk开发组)。您是否希望允许某些代码重新生成文件?@AllenG-最终目的地将是一个网站,最终用户可以使用该网站监控流程并解决任何错误。我指的最终用户是业务流程所有者。他们不需要具体地了解BizTalk管理,他们需要知道供应商发送的(例如)采购订单是否进入了分析数据库,如果没有,发生了什么。我现在是biztalk开发人员和管理员,但我们现在已经有足够的应用程序发布了,我无法再处理所有的管理员职责。我已经在做你提到的2个选项了。。。我发现它真的不好用。我尝试将事件日志输入时间与messagebox数据库中的异常时间相匹配。它经常会关闭几秒钟。然而,尽管这看起来像是我想要避免的,我认为你提到的第三个选择看起来是最好的。我将创建一个POC组件和一些管道,并让您知道它是如何工作的。谢谢你的帮助!