在BizTalk 2010中处理空文件

时间:2013-12-09 15:25:16

标签: biztalk biztalk-2010

我的BizTalk 2010项目中有一个接收位置,有时接收位置将收到一个空文件。接收管道是PassThruReceive。然后,我们有一个发送端口,其具有该接收端口名称的过滤器。所以我们所做的就是将文件从接收位置移动到发送位置。

我遇到的问题是,如果我们在接收位置获得一个空文件,我的客户端希望文件仍然移动到发送端口。我知道开箱即用,FILE适配器会丢弃空文件并将事件写入事件日志,说明它已被删除。

我已经关注了显示自定义FILE适配器完成此任务的文章。我在这个自定义适配器上取得了一些成功。文件被拿起。由BizTalk接收并且发送端口成功发送文件。但是,即使使用此解决方案,我也遇到了文件被锁定且无法删除的接收端的问题。我已经关注了这个主题的各种文章,每次文件被锁定且无法删除时,我都会遇到同样的问题。

我的问题是。即使正在调用batchMessage.Message.BodyPart.Data.Close();,流仍然被锁定。有什么方法可以找到BizTalk可能锁定文件的位置吗?有没有其他办法处理这个?

我关注的其中一篇文章位于:http://biztalkwithshashikant.blogspot.com/2011/04/processing-empty-files-in-biztalk.html

3 个答案:

答案 0 :(得分:0)

在我看来,在运行自定义FILE适配器多服务器时遇到了问题。我打赌你在BizTalk Group中运行的服务器超过1台?

我自己还没有这样做,但我听说让适配器顺利运行多服务器是BizTalk中最难做的事情之一。诀窍是找到一种方法,以便能够在同一BizTalk主机的多个实例之间共享负载。

仅在1台服务器而不是2台上运行实例时,您是否还有同样的问题?

答案 1 :(得分:0)

在自定义管道组件代码方法中:

IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

您应该返回pInMsg,而不是设置为null,并且.BodyPart流位于末尾。如果pInMsg为null,BizTalk将以静默方式丢弃该消息。你不需要关闭它,但你需要将它移到最后让BizTalk知道你读取并处理它。

答案 2 :(得分:0)

解决这个问题的方法是使用FTP适配器代替文件,FTP适配器不会丢弃空文件。

很有可能,系统创建文件时,它仍然是文件位置,但也可以通过FTP访问。