代码之家  ›  专栏  ›  技术社区  ›  Keith Sirmons

Biztalk能否运行控制台应用程序?

  •  3
  • Keith Sirmons  · 技术社区  · 16 年前

    我正在编写一个C控制台应用程序,它获取一个二进制文件,将其拆分、分析并将数据存储到数据库中。

    我们希望使用Biztalk协调监视新的二进制文件何时放置在目录中,并使用要分析的文件名/名称调用我的应用程序。

    Biztalk能否运行命令行程序?
    它能将命令行参数传递给程序吗?
    如何向Biztalk报告上次运行是成功还是失败?

    谢谢您,
    基思

    3 回复  |  直到 16 年前
        1
  •  3
  •   David Hall    16 年前

    我愿意 建议这样做,但理论上可以在表达式形状内使用shell命令运行exe:

    System.Diagnostics.Process.Start(@"C:\yourPath\yourExecutable.exe")

    这个 System.Diagnostics 名称空间在Biztalk2006中可用,我认为它在Biztalk2004中不可用(Biztalk2004具有非常有限的可用系统名称空间子集)。

    我不确定是否要返回返回值,但您当然应该能够提供参数。

    可以在C shell命令上找到一些引用 here here .

    我个人认为你有三个更好的选择:

    1. 不要使用Biztalk。

      正如坎贝尔建议的那样,使用Windows服务。

      仅当您希望利用现有的Biztalk框架(日志记录、报告等…)或如果您在Biztalk将要执行的工作流中有其他任务时,才将Biztalk用于此类用途。(存在将所有内容放入一个平台的参数-如果将Biztalk用于一件事,则将if用于所有内容,但这是一个不同的对话)。

    2. 将碎纸机的逻辑重构为C类库,控制台应用程序和Biztalk都可以调用该库。

      从Biztalk调用类库比从可执行文件调用要容易得多。

      只需从业务流程引用已签名和gaced程序集(将其创建为业务流程变量),然后可以直接从表达式形状调用它。

      here 是一篇关于这方面的文章,涵盖了基础知识。它并没有涉及到很多难看的细节,也没有提供关于最佳实践的讨论。 Professional BizTalk Server 2006 是一本很好的书。

    3. 正如坎贝尔所说,其中大部分可以通过纯粹的Biztalk功能来完成。

    我认为也许选择2和3的组合最适合你想要的。将已经具有的二进制分解逻辑放入C类库中,并从负责文件监视、错误通知、跟踪和与其他进程集成的Biztalk编排中调用该逻辑。

        2
  •  1
  •   Campbell    16 年前

    Biztalk是一个服务器产品,因此在生产环境中设置它时,它将始终在后台运行。

    我建议,如果您要使用Biztalk,请将其设置为监视文件的放置位置、将其拆分、分析它,然后将其全部写入到数据库中。这正是它的设计目的。工作流还可以包含通知,或者您也可以使用Biztalk跟踪来确认操作是否成功。您可能需要编写的唯一自定义代码是一个反汇编程序,用于将二进制文件转换为XML。这将作为接收管道组件完成。

    如果这就是您所做的全部工作,那么对于这一点来说,Biztalk是一个非常昂贵的选择。我建议您编写自己的Windows服务并使用 FileSystemWatcher 截取文件已被写入的事实,然后用C代码进行处理。

        3
  •  1
  •   Christian Loris    16 年前

    调用C应用程序的Biztalk有点过时了。我们以前遇到过这样的问题,我们将控制台应用程序作为Web服务编写或包装。通过这种方式,Biztalk会获取要丢弃的文件并将其发送到应用程序Web服务应用程序。这属于我们如何使用Biztalk的“瑞士军刀”部分。这真是小打小闹。但是,Biztalk提供了跟踪、BAM、farside失败排队等功能。此外,我们还可以将文件复制到存档位置、从Web服务读取结果代码以及使用SMTP适配器发送成功或失败通知。

    希望这能给你一些建议。祝你好运!