我的第一个堆栈溢出问题,所以请原谅我这里的任何愚蠢/天真。
我有一个使用Claim Check的BizTalk 2010 R2解决方案 使用自定义管道组件实现的集成模式将大型(当前最多1Gb).mp4文件移动到接收时的文件夹位置,并在发送时再次拾取它们,以便它们不通过BizTalkMsgBoxDb。
有时我们会收到导致在接收端口引发异常的文件的错误。我们使用“为失败的消息启用路由”设置来避免实例在系统中挂起,但这会导致将大的.mp4文件拖入消息框,最终导入EsbExceptionDb。显然不是理想的解决方案。
我可以在自定义接收管道组件中实现代码来处理特定类型的错误,但我想知道是否有更好的方法来处理这个,以便任何异常 - 预期或意外 - 会导致大文件被路由到其他地方的失败文件存储,而无需随时进入BizTalkMsgBoxDb。
感谢任何建议。
答案 0 :(得分:0)
我建议在自定义接收管道中处理异常。
绝对确保pInMsg.BodyPart.Data
被另一个(较小的)流替换,然后大文件无法流入BizTalkMsgBoxDb,因为BizTalk不再具有对它的引用。
答案 1 :(得分:0)
显然你必须使用异常处理并确保pInMsg.BodyPart.Data不为空。此外,如果您使用本文中建议的自定义管道' http://www.codeproject.com/Articles/180216/Transfer-Large-Files-using-BizTalk-Receive-Side'
请确保优化execute方法中的代码。对于我的情况,我替换while while(bytesRead!= 0)循环使用下面的代码。现在我在自定义管道中没有看到任何问题,并且它运行得很快。 使用
(var fileStream = File.Create("C:\\Path\\To\\FileName")){originalStream.Seek(0, SeekOrigin.Begin);originalStream.CopyTo(fileStream);}