SSIS:FTP任务 - 并发连接

时间:2015-04-20 07:51:01

标签: sql-server concurrency ssis ftp connection

我已经创建了一个SSIS包,用于从FTP服务器下载文件。 当我调试包时,一切都很顺利。但是,当我将程序包作为Job步骤进行处理时,它有时无法连接。 该作业每4小时重复一次,平均每次运行失败,错误: 0xC002918F - 登录请求被拒绝

该连接是匿名的,不需要密码

我已经测试了几个小时了,发现了一些信息:

  • 在FileZilla中测试时,我发现服务器拒绝尝试下载文件的第二个连接。 将最大并发连接数设置为1使其在FileZilla中工作
  • 命令行中的FTP命令工作正常。也许是因为它在每次成功命令后关闭连接
  • 在FTP连接管理器中,我没有找到限制连接数的选项

我无法查看FTP服务器的设置。 最让我困惑的是,一些已经完成的任务工作得很好而有些失败了。我没有发现任何规律性。

到目前为止我尝试了什么:

  • 主动模式
  • 将FTP连接管理器中的重试限制为1
  • 转移时间,因此它不会与尝试从服务器下载的任何其他(较旧)任务发生冲突
  • 将FTP任务设置为ASCII模式(服务器对FileZilla说,它只接受ASCII字符)

到目前为止没有运气。还有一些尝试成功,有些则没有。

修改

FTP服务器位于Simatic设备上。

本周,我每隔1小时保持一次,并且每隔30秒不断对设备进行一次ping操作。仍然有一些SSID尝试没有成功,每次都会ping通: - /

5 个答案:

答案 0 :(得分:4)

我将用执行进程任务替换标准SSIS FTP任务,并调用WinSCP。

https://winscp.net/eng/docs/guide_automation

我发现WinSCP更加可靠和灵活。您可以传递一个使用表达式构建的命令行来覆盖SSIS FTP任务的所有功能,等等。

答案 1 :(得分:3)

我认为您必须接受在此方案中仅使用解决方法,可能将SQL代理SSIS作业步骤设置为在X秒延迟后重试(SQL作业步骤的高级选项卡)。当我们使用SSIS连接到片状云API时,我们会做很多事情。

或者你的包裹中的for循环容器可能会继续失败&突破成功 - 也许尝试3次连接?

很抱歉,如果这一点已经很明显了。

答案 2 :(得分:2)

以前的错误被称为:

  

' 0xC002918F', - 1073573489,' DTS_E_FTPTASK_UNABLETOCONNECTTOSERVER','无法使用" __"连接到FTP服务器。'

FTP任务在操作执行结束时显式关闭连接,因此如果连接保持打开状态,则必须与服务器有关。

CozyRockPragmaticWorks都为SSIS提供了出色的FTP任务。

Microsoft网站上列出的指南

https://support.microsoft.com/en-us/kb/925880

https://technet.microsoft.com/en-us/library/bb794745.aspx

除了防火墙/权限/限制之外,请检查FTP凭据或确切地保存/检索它们。在这种情况下的经验法则是依赖SQL Server,即使用"依靠服务器存储和角色进行访问控制"包保护级别。这种方法应该完全删除所有FTP凭据问题(当然不包括mistypos)。

然而,这是使用Project Deployment Model to store packages in the SSISDB catalog which is where the package you noted resides.

时应用的默认设置

上述海报建议,请勿使用XP_CMDSHELL并在没有业务需要的情况下调用外部程序。启用CMDSHELL是一个重大的安全风险。

答案 3 :(得分:1)

根据我的经验,即使在结束包执行后,有时FILE LOCKDB CONNECTION也不会终止。

我建议您使用Script Task并使用C#代码进行上传,并确保在最后关闭FTP连接。

答案 4 :(得分:0)

在黑暗中拍摄,您是否介意尝试更新包并设置DelayValidation = True?

DelayValidation: True

验证例程建立连接以测试它们。也许验证例程是另一个并发连接?值得一试?