0

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

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

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

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

我发现的有关获取特定错误消息的所有内容都处理从编排中抛出的异常。不过,我不是在处理编排,而是在处理接收端口。我能找到的最接近的地方就是这里。但即使我可以使用它创建一个自定义管道组件,这意味着我需要将该组件添加到每个现有的自定义管道中,或者创建一个新的来验证 XML 并使用它而不是 BizTalk 附带的 XMLRecieve 或 XMLSend 管道...这也意味着捕获由 EDI 产生的错误是不可能的。有谁知道从 BizTalk 生成的错误消息中获取更详细的错误描述的方法?

4

1 回答 1

0

我不确定是否有一个工具可以完全满足您的需求,但我确实有几个选择。

1) 我很确定 SCOM 可以抓住这些错误并提醒需要提醒的人。不过,我过去遇到过一些问题,所以这可能不是你最好的选择。

2) 对于基本的故障处理,您可以编写代码以从 BizTalk 中抓取任何警告或错误的 EventLog 并将其传递下去(我当前的客户端会这样做 - 它不是超级优雅,但效果很好)。

3)我会鼓励 - 如果您不想要编排 - 是设置自定义管道,除了您的正常操作之外,它只是实现您的错误处理/监控。然后,对于非关键消息,您仍然可以使用标准管道(减少开销/延迟),对于关键消息,您可以使用“GuaranteedDeliveryPassThruPipeline”或“GuaranteedDeliveryXMLTransmitPipeline”等。

于 2011-04-20T20:14:21.710 回答