在BizTalk 2010中处理空文件

在BizTalk 2010中处理空文件,biztalk,biztalk-2010,Biztalk,Biztalk 2010,我在BizTalk 2010项目中有一个接收位置,有时该接收位置将接收一个空文件。接收管道是PassThruReceive。然后我们有一个发送端口,该端口有一个用于该接收端口名的筛选器。因此,我们所做的就是将文件从接收位置移动到发送位置 我遇到的问题是,如果我们在接收位置得到一个空文件,我的客户端希望该文件仍然被移动到发送端口。我知道,在开箱即用的情况下,文件适配器会丢弃空文件,并将一个事件写入事件日志,声明它已被删除 我已经阅读了一些文章,这些文章展示了一个自定义文件适配器如何完成这项任务。我

我在BizTalk 2010项目中有一个接收位置,有时该接收位置将接收一个空文件。接收管道是PassThruReceive。然后我们有一个发送端口,该端口有一个用于该接收端口名的筛选器。因此,我们所做的就是将文件从接收位置移动到发送位置

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

我已经阅读了一些文章,这些文章展示了一个自定义文件适配器如何完成这项任务。我使用这个自定义适配器取得了一些成功。文件被拾起了。BizTalk已接收,发送端口已成功发送该文件。但是,即使使用此解决方案,我在接收端也遇到了一个问题,文件被锁定,无法删除。我已经关注了关于这个主题的各种文章,每次当文件被锁定且无法删除时,我都会收到相同的问题

我的问题是。即使batchMessage.Message.BodyPart.Data.Close;正在调用时,流仍被锁定。是否有任何方法可以让我找到BizTalk可能正在锁定该文件的其他位置?还有别的办法吗


我关注的一篇文章位于此处:

在我看来,您在运行自定义文件适配器多服务器时遇到了问题。我打赌您在BizTalk组中运行了多台服务器

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


当仅在1台服务器而不是2台服务器上运行实例时,是否仍存在相同的问题?

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

IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

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

解决方法是使用FTP适配器来拾取文件,FTP适配器不会丢弃空文件


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

是否设置了WIP值?而且,如果文件有数据,它会工作吗?我设置了值,没有。如果有数据或没有数据,它会有相同的问题。我会在文件上放置一个断点。删除,然后使用Process Explorer查看谁锁定了文件,然后深入查看底层流是否仍然是文件流。虽然如果不是这样,我不确定下一步该怎么办:。我正在本地开发机器上运行这个,所以现在它是一个单服务器环境。