这个问题最初询问哪种是在 SSIS 中通过 SFTP 或 FTPS 上传文件的最佳方法。它现在只是列出了每种解决方案的优缺点。这些天我个人使用 CozyRoc 的 SFTP 库,但我曾经使用过以下每个解决方案。
SSIS 组件库
方法:在每个开发和生产服务器上安装来自CozyRoc、Codeplex、BizCrypto、PragmaticWorks或其他供应商的 SSIS 组件库,并使用 SFTP 任务上传文件。
优点:易于使用。它的外观、气味和感觉都像是一个普通的 SSIS 任务。SSIS 还将密码识别为敏感信息,并允许您使用所有常规选项来保护敏感信息,而不仅仅是以不安全的方式以明文形式存储它。适用于其他 SSIS 任务,例如 ForEach 循环容器。上传和下载失败时出错。当您不知道远程 FTP 站点上要下载的文件的名称,或者直到运行时才知道要上传的文件的名称时,它的效果很好。
缺点:除了 Codeplex 解决方案之外,在生产环境中获得许可需要花钱。需要在每台开发和生产机器上安装库。如果它是 Codeplex 解决方案,那么您正在使用不受任何特定供应商支持的软件。这也使您依赖供应商在每个版本之间更新他们的库。例如,在 2008 RTM'd 之前,我在 2008 的 CTP 版本上开发了一个新服务器,而 CozyRoc 2005 库与它不兼容。最终他们发布了 2008 兼容版本,但我不得不暂时使用命令行解决方案来解决这个问题。
命令行 SFTP 程序
方法:安装一个免费的命令行SFTP应用程序,如Putty和WinSCP,并通过运行批处理文件或操作系统进程任务来执行它。此处列出了通过 WinSCP 执行此操作的说明。
优点:免费,免费和免费。如果您使用的是 Putty,您可以确定它是安全的,因为许多 GUI FTP 客户端似乎都在使用 Putty。您肯定知道您使用的是 SSH2 而不是 SSH。
缺点:我尝试的两个命令行实用程序(Putty 和 Cygwin)需要将 SFTP 密码存储在不安全的位置。我还没有找到在上传文件时捕获失败或错误的好方法。这个过程看起来和闻起来都不像 SSIS。大多数代码都封装在文本文件中,而不是 SSIS 本身。如果您不知道要上传或下载的文件的确切名称,则很难使用。
第三方 C# 或 VB.NET 库
方法:安装 SFTP 或 FTPS 库并使用引用该库的脚本任务来上传文件。(我从来没有尝试过,所以我会猜测利弊)
优点:可能很容易捕获错误。应该可以很好地使用变量,因此即使您不知道要上传或下载的文件的确切名称,它也可能很容易使用。
缺点:这是一个结合 .NET 库的脚本任务。如果您使用的是 SSIS,那么您可能更喜欢 SSIS 任务而不是 .NET 代码。脚本任务也很难排除故障,因为它们没有与常规 .NET 项目相同的调试工具和功能。创建对 3rd 方代码的依赖项,该依赖项可能在不同版本的 SQL Server 之间不起作用。公平地说,它可能比第 3 方 SSIS 任务库更可能在不同版本的 SQL Server 之间工作。另一个巨大的骗局——到目前为止,我还没有找到一个免费的 C# 或 VB.NET 库。所以如果有人知道,请告诉我!