【问题标题】:Processing Empty Files in BizTalk 2010在 BizTalk 2010 中处理空文件
【发布时间】:2013-12-09 15:25:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您是否设置了 WIP 值?而且,如果文件有数据,它会起作用吗?
  • 我确实设置了值,如果有数据或没有数据,它有同样的问题。
  • 我会在 File.Delete 上设置一个断点,然后使用 Process Explorer 查看谁锁定了文件,然后向下挖掘,看看底层 Stream 是否仍然是 FileStream。虽然如果不是,我不确定下一步我会做什么:)。

标签: biztalk biztalk-2010


【解决方案1】:

在我看来,您在运行自定义 FILE 适配器多服务器时遇到了问题。我敢打赌,您在 BizTalk Group 中运行的服务器不止一台?

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

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

【讨论】:

  • 我在我的本地开发机器上运行它,所以它现在是一个单服务器环境。
【解决方案2】:

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

IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

您应该返回 pInMsg,而不是设置为 null,并且 .BodyPart 流位于末尾。如果 pInMsg 为空,BizTalk 将静默丢弃该消息。您无需将其关闭,但您需要将其移至最后,让 BizTalk 知道您已阅读并处理了所有内容。

【讨论】:

    【解决方案3】:

    解决此问题的一种方法是使用 FTP 适配器代替拾取文件,FTP 适配器不会丢弃空文件。

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

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多