BizTalk 中大型消息处理的异常处理

Exception Handing for Large Message Processing in BizTalk

我的第一个堆栈溢出问题,所以请原谅我在这里的任何 stupidity/naivety。

我有一个使用 Claim Check 的 BizTalk 2010 R2 解决方案 使用自定义管道组件实现的集成模式可将大型(目前最大 1Gb).mp4 文件移动到接收时的文件夹位置,并在发送时再次拾取它们,这样它们就不会通过 BizTalkMsgBoxDb。

有时我们会在接收文件时遇到错误,导致接收端口出现异常。我们使用 'Enable routing for failed messages' 设置来避免实例在系统中挂起,但这会导致大型 .mp4 文件被拖到消息框中,并最终导致 EsbExceptionDb。显然不是理想的解决方案。

我可以在自定义接收管道组件中实现代码来处理特定类型的错误,但我想知道是否有更好的方法来处理这个问题,以便 any 异常 -预期或意外 - 将导致大文件被路由到其他地方的失败文件存储,而无需随时输入 BizTalkMsgBoxDb。

非常感谢收到任何建议。

我建议在自定义接收管道中处理异常。

绝对确保 pInMsg.BodyPart.Data 被不同的(较小的)流替换,然后大文件无法流式传输到 BizTalkMsgBoxDb,因为 BizTalk 不再引用它。

显然你必须使用异常处理并确保 pInMsg.BodyPart.Data 不为空。此外,如果您按照本文“http://www.codeproject.com/Articles/180216/Transfer-Large-Files-using-BizTalk-Receive-Side

中的建议使用自定义管道

请确保优化执行方法中的代码。对于我的情况,我用下面的代码替换了 while(bytesRead!=0) 循环。现在,我的自定义管道中没有发现任何问题,而且运行速度很快。 使用

(var fileStream = File.Create("C:\Path\To\FileName")){originalStream.Seek(0, SeekOrigin.Begin);originalStream.CopyTo(fileStream);}