2011-04-20 27 views
0

我正在寻找一种方法来捕获BizTalk 2006 R2引发的实际异常时,接收端口无法解析它收到的消息。BizTalk 2006 R2模式验证特定的错误消息与失败的邮件路由

例如,我有一个没有正确创建的csv文件,说它缺少逗号,所以当BizTalk试图确定消息类型时,它出错了。不使用失败的消息路由,应用程序事件日志中有2个条目。其中有一个非常通用的错误描述,如“消息引擎在处理一个或多个入站消息期间遇到错误”。第二项有我正在寻找的。它将包含错误逗号的详细信息,这些内容包括“寻找时发现的意外数据: ”,“ ”当前定义被解析为POSTrailer。错误发生处的流偏移量为44443。错误发生的位置是244.发生错误的位置是1.“

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

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

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

+0

为什么这将会发送给您的最终用户?我所从事的每个组织都将这一切留给了BizTalk管理员(通常是系统管理员或BizTalk开发组)。你是否希望允许一些代码重新生成文件? – AllenG 2011-04-20 19:04:39

+0

@AllenG - 这个最终目标将是一个网站,最终用户可以使用它来监控流程并解决任何错误。我所指的最终用户是业务流程所有者。他们无需了解BizTalk管理,他们需要知道(例如)由供应商发送的采购订单将其发送到分析数据库,如果不是,发生了什么。我当然是biztalk开发人员和管理员,但现在我们已经获得了足够的应用程序,以至于我无法处理所有的管理任务。 – 2011-04-20 19:58:42

回答

0

我不确定这个工具能够完全满足您的要求,但我确实有几个选项。

1)我很确定SCOM可以抓住这些错误并提醒任何需要提醒的人。不过,过去我也遇到过一些问题,所以它可能不是你最好的选择。 2)对于基本的失败处理,你可以编写代码来刮掉EventLog中的任何来自BizTalk的警告或错误,并将其传递给下一行(我当前的客户端这样做 - 它不是超级优雅,但效果不错)。 3)我会鼓励 - 如果你不需要编排 - 就是设置自定义管道,除了正常操作之外,它还可以简单地实现你的错误处理/监视。然后,对于非关键的消息,您仍然可以使用标准管道(减少开销/延迟),对于关键消息,您可以使用“GuaranteedDeliveryPassThruPipeline”或“GuaranteedDeliveryXMLTransmitPipeline”或其他。

+0

我已经在做你提到的2个选项了......我发现它确实不能很好地工作。我尝试将事件日志输入时间与messagebox db中的异常时间进行匹配。它经常关闭几秒钟。然而,即使它看起来像我想避免的,我认为你提到的第三种选择看起来是最好的。我将创建一个POC组件和一些管道,让你知道它是如何工作的。感谢AllenG的帮助! – 2011-04-20 20:33:32

相关问题