Biztalk可以运行控制台应用程序吗?

时间:2008-10-29 14:58:32

标签: command-line console biztalk

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

我们希望在将新的二进制文件放在目录中并使用要解析的文件名/名称调用我的应用程序时,使用BizTalk来协调观看。

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

谢谢你,
基思

3 个答案:

答案 0 :(得分:3)

建议这样做但理论上你可以在表达式形状中使用shell命令运行exe:

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

BizTalk 2006中提供了System.Diagnostics命名空间,我不认为它在BizTalk 2004中可用(BizTalk 2004有一个非常有限的系统命名空间子集可用)。

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

可以找到有关C#shell命令的一些参考资料herehere

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

  1. 不要使用BizTalk。

    正如Campbell建议的那样,改为使用Windows服务。

    如果您想利用已有的BizTalk框架(日志记录,报告等等),或者如果您在BizTalk将要执行的工作流程中有其他任务,则仅使用BizTalk这样的事情。 (有将所有内容放在一个平台上的论据 - 如果你将BizTalk用于一件事,请使用if for everything,但这是一个不同的对话)。

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

    从BizTalk调用类库比干净地调用可执行文件要容易得多。

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

    here是一篇关于此的文章,涵盖了基础知识。它没有涉及很多丑陋的细节或提供关于最佳实践的讨论。 Professional BizTalk Server 2006是一本好书。

  3. 正如坎贝尔所说,大部分内容都可以通过纯BizTalk功能来完成。

  4. 我认为选项2和3的混合可能最适合你想要的。将已有的二进制碎化逻辑放入C#类库,并在BizTalk业务流程中调用它,负责文件监控,错误通知,跟踪以及与其他进程的集成。

答案 1 :(得分:1)

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

我建议如果你想使用BizTalk,你可以将它设置为观察文件将被删除的位置,将其分开,分析它然后在BizTalk工作流程中写出数据库。它正是它的设计目标。工作流还可以包含通知,或者您可以使用BizTalk跟踪来确认操作是否成功。您可能需要编写的唯一自定义代码是二进制文件的反汇编程序,可将其转换为XML。这将作为接收管道组件完成。

如果这就是你所做的一切,那么BizTalk就是一个昂贵的选择。我建议您编写自己的Windows服务,并使用FileSystemWatcher拦截已写入文件的事实,然后在C#代码中进行处理。

答案 2 :(得分:1)

BizTalk调用一个C#应用程序就好了,如果它的盒子。我们过去曾遇到类似的问题,我们将控制台应用程序编写或包装为Web服务。这样,Biztalk会获取正在删除的文件并将其发送到应用程序Web服务应用程序。这属于我们如何使用BizTalk的“瑞士军刀”部分。这真的是不合理的。但是,BizTalk确实提供了跟踪,BAM,远程故障排队等功能。我们还将文件复制到存档位置,从Web服务读取结果代码,并使用SMTP适配器发送成功或失败的通知。

希望这会给你一些想法。祝你好运!