2008-10-29 67 views
3

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

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

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

谢谢
基思

回答

3

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

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

System.Diagnostics命名空间是在2006年的BizTalk可用,我不t认为它在BizTalk 2004中可用(BizTalk 2004有一个非常有限的可用System名称空间子集)。

我不确定要获取返回值,但您应该可以提供参数。

有关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功能来完成。

我想也许选项2和3的组合会最适合你想要的。把你已经拥有的二进制粉碎逻辑放入一个C#类库中,并从BizTalk编排中调用它来处理文件监视,错误通知,跟踪和与其他进程的集成。

+0

谢谢。我们今天举行了会议,并决定这样做。我已经将碎纸机写成它自己的.DLL文件,而.EXE只是一个包装/装载机.DLL。我现在要去尝试编写一个适用于BizTalk的适配器DLL,并将其接入粉碎机。感谢您的链接。 – 2008-10-29 21:45:19

1

Biztalk的是服务器产品,因此会一直在,当你将它设置在生产环境后台运行。

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

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

+0

Biztalk已经准备就绪,正在用于其他操作(HL7)。执行此文件翻录的引擎已经写入。我只是试图使用BizTalk将文件带到应用程序,并报告是否有任何返回的错误代码。谢谢。 – 2008-10-29 16:45:02

1

的BizTalk调用C#应用程序是怎么样的了,如果它的盒子。过去我们遇到过这样的问题,我们将控制台应用程序编写或封装为Web服务。这样,Biztalk就会选择要删除的文件并将其发送到应用程序Web服务应用程序。这属于我们如何使用BizTalk的“瑞士军刀”部分。这实在太不合时宜了。但是,BizTalk确实提供了诸如跟踪,BAM,面向故障排队等的功能。另外,我们还将文件复制到归档位置,从Web服务读取结果代码,并使用SMTP适配器发送成功或失败通知。

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

相关问题