我正在编写一个 C# 控制台应用程序,它获取一个二进制文件,将其拆分、分析并将数据存储到数据库中。
我们希望使用 BizTalk 来协调监视何时将新的二进制文件放置在目录中并使用要解析的文件名/名称调用我的应用程序。
BizTalk 可以运行命令行程序吗?
它可以将命令行参数传递给程序吗?
我将如何向 BizTalk 报告上次运行是成功还是失败?
谢谢你,
基思
我正在编写一个 C# 控制台应用程序,它获取一个二进制文件,将其拆分、分析并将数据存储到数据库中。
我们希望使用 BizTalk 来协调监视何时将新的二进制文件放置在目录中并使用要解析的文件名/名称调用我的应用程序。
BizTalk 可以运行命令行程序吗?
它可以将命令行参数传递给程序吗?
我将如何向 BizTalk 报告上次运行是成功还是失败?
谢谢你,
基思
我不建议这样做,但理论上您可以在表达式形状中使用 shell 命令运行 exe:
System.Diagnostics.Process.Start(@"C:\yourPath\yourExecutable.exe")
命名空间在 BizTalk 2006中System.Diagnostics
可用,我不认为它在 BizTalk 2004 中可用(BizTalk 2004 有一个非常有限的可用系统命名空间子集)。
我不确定是否要返回返回值,但您当然应该能够提供参数。
可以在此处和此处找到有关 C# shell 命令的一些参考资料。
我个人认为您可以使用三个更好的选择:
不要使用 BizTalk。
正如 Campbell 建议的那样,请改用 Windows 服务。
如果您想利用现有的 BizTalk 框架(日志记录、报告等),或者如果您在 BizTalk 将要执行的工作流中有其他任务,请仅将 BizTalk 用于此类事情。(对于将所有内容都放在一个平台上存在争议 - 如果您将 BizTalk 用于一件事,则将 if 用于所有内容,但这是另一种对话)。
将粉碎机的逻辑重构为控制台应用程序和 BizTalk 都可以调用的 C# 类库。
从 BizTalk 调用类库比调用可执行文件更容易干净和稳健地完成。
只需从编排中引用已签名和 GAC 的程序集(将其创建为编排变量),然后您就可以直接从表达式形状中调用它。
这是一篇涵盖基础知识的文章。它没有涉及很多丑陋的细节,也没有提供关于最佳实践的讨论。Professional BizTalk Server 2006是一本很好的书。
正如 Campbell 所说,其中大部分可能可以通过纯 BizTalk 功能来完成。
我认为也许选项 2 和 3 的组合最适合你想要的。将您已有的二进制粉碎逻辑放入 C# 类库中,并从 BizTalk 编排中调用它,该编排负责您的文件监视、错误通知、跟踪以及与其他进程的集成。
Biztalk 是一种服务器产品,因此当您在生产环境中设置它时,它将始终在后台运行。
我建议,如果您想使用 BizTalk,请将其设置为观察文件将被删除的位置,将其撕开,分析它,然后在 BizTalk 工作流程中将所有内容写入数据库。这正是它的设计目的。工作流还可以包含通知,或者您可以只使用 BizTalk 跟踪来确认操作是否成功。您可能需要编写的唯一自定义代码是将二进制文件转换为 XML 的反汇编程序。这将作为接收管道组件完成。
如果这就是你所做的一切,那么 BizTalk 就是一个非常昂贵的选择。我建议您编写自己的 Windows 服务并使用FileSystemWatcher来拦截文件已写入的事实,然后在您的 C# 代码中进行处理。
BizTalk 调用 C# 应用程序有点出格。我们过去曾遇到过类似的问题,我们将控制台应用程序编写或包装为 Web 服务。这样,Biztalk 会拾取被丢弃的文件并将其发送到应用程序 Web 服务应用程序。这属于我们如何使用 BizTalk 的“瑞士军刀”部分。这实在是太武断了。但是,BizTalk 确实提供了诸如跟踪、BAM、远端故障排队等功能。我们还涉及将文件复制到存档位置、从 Web 服务读取结果代码以及使用 SMTP 适配器发送成功或失败通知。
希望这能给你一些想法。祝你好运!