2014-09-29 78 views
4

我试图连接到sftp服务器,并且我没有得到任何异常或超时,只增加内存使用量。试图连接到sftp服务器时没有消息或超时

我使用的库EnterpriseDT.Net.Ftp

我的代码是这样的:

XmlConfigurator.Configure(); 
     Module1.Logger = LogManager.GetLogger("SftpTester"); 
     try 
     { 
     Module1.Logger.Info((object) "[EnterpriseDT] - Start"); 
     Uri uri1 = new Uri("ftp://*****"); 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     Uri& uri2 = @uri1; 
     int port = ****; 
     string str1 = "******"; 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     string& UserName = @str1; 
     string str2 = "*******"; 
     // ISSUE: explicit reference operation 
     // ISSUE: variable of a reference type 
     string& Password = @str2; 
     SecureFTPConnection secureFtpConnection = Module1.InitConnection(uri2, port, UserName, Password); 
     Module1.Logger.Info((object) "Connecting to ftp..."); 
     secureFtpConnection.Connect(); 
     Module1.Logger.Info((object) "Connection Successful!!!"); 
     try 
     { 
      Module1.Logger.Info((object) "Disposing connection..."); 
      secureFtpConnection.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      ProjectData.SetProjectError(ex); 
      ProjectData.ClearProjectError(); 
     } 
     Module1.Logger.Info((object) "Connection Disposed."); 
     } 
     catch (Exception ex) 
     { 
     ProjectData.SetProjectError(ex); 
     Exception exception = ex; 
     Module1.Logger.Error((object) ("Main() - " + exception.Message)); 
     Module1.Logger.Error((object) ("StackTrace: " + exception.StackTrace)); 
     if (exception.InnerException != null) 
      Module1.Logger.Error((object) ("InnerException: " + exception.InnerException.Message)); 
     ProjectData.ClearProjectError(); 
     } 
     finally 
     { 
     Module1.Logger.Info((object) "[EnterpriseDT] - End"); 
     } 

    private static SecureFTPConnection InitConnection(ref Uri uri, int port, ref string UserName = "", ref string Password = "") 
    { 
     Module1.Logger.Info((object) "InitConnection() - Setting Up Connection"); 
     SecureFTPConnection secureFtpConnection = new SecureFTPConnection(); 
     secureFtpConnection.LicenseOwner = "*******"; 
     secureFtpConnection.LicenseKey = "***********"; 
     secureFtpConnection.ServerAddress = uri.Host; 
     Module1.Logger.Info((object) ("\tHost: " + uri.Host)); 
     secureFtpConnection.UserName = UserName; 
     Module1.Logger.Info((object) ("\tUsername: " + UserName)); 
     secureFtpConnection.Protocol = FileTransferProtocol.SFTP; 
     Module1.Logger.Info((object) ("\tProtocol: " + FileTransferProtocol.SFTP.ToString())); 
     secureFtpConnection.ServerValidation = SecureFTPServerValidationType.None; 
     Module1.Logger.Info((object) ("\tServerValidation: " + SecureFTPServerValidationType.None.ToString())); 
     secureFtpConnection.AuthenticationMethod = AuthenticationType.Password; 
     Module1.Logger.Info((object) ("\tAuthenticationMethod: " + AuthenticationType.Password.ToString())); 
     if (port > 0) 
     { 
     secureFtpConnection.ServerPort = port; 
     Module1.Logger.Info((object) ("\tServerPort: " + port.ToString())); 
     } 
     secureFtpConnection.Password = Password; 
     Module1.Logger.Info((object) ("\tPassword: " + Password)); 
     return secureFtpConnection; 
    } 

日志消息:

2014-09-27 04:50:22,783 [1] - [SftpTester] [EnterpriseDT] - Start 
2014-09-27 04:50:22,799 [1] - [SftpTester] InitConnection() - Setting Up Connection 
2014-09-27 04:50:22,971 [1] - [SftpTester] Host: ******* 
2014-09-27 04:50:22,971 [1] - [SftpTester] Username: ***** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Protocol: SFTP 
2014-09-27 04:50:22,971 [1] - [SftpTester] ServerValidation: None 
2014-09-27 04:50:22,971 [1] - [SftpTester] AuthenticationMethod: Password 
2014-09-27 04:50:22,971 [1] - [SftpTester] ServerPort: **** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Password: ****** 
2014-09-27 04:50:22,971 [1] - [SftpTester] Connecting to ftp... 

任何想法,如果这是一个超时错误或如果我在黑名单中?

更新2014年7月10日

序列服务器:

  1. 密码验证
  2. 等待包
  3. 包到达
  4. 验证部分成功。尝试:密码,公钥,键盘交互
  5. 键盘交互认证
  6. 等待包
  7. 包到达
  8. 提示:密码:
  9. 等待包
  10. 包到达
  11. 验证部分成功。尝试:密码,公钥,键盘交互
  12. 等待包
  13. 包到达
  14. 提示:密码:
  15. 环路(9〜15)

更新

更新图书馆解决问题,是一个错误。

版8.6.1 (2014年9月23日)
固定KBI重入错误会导致认证尝试的一个循环。 修复了在将文件上传到不存在的目录时不引发异常的SFTP错误。 修复了OpenVMS SFTP服务器未被识别为SSH的SFTP问题。 修复只有一次重新连接的重试下载问题。 修复了一些使用FTPS的2012 R2机器上的“试图读取或写入受保护的内存”问题。

+0

我想知道它是否是图书馆问题。您是否尝试过通过FileZilla等FTP客户端连接到同一台服务器?你有没有尝试过使用差异库?做这些工作的任何? – 2014-10-01 11:51:06

+0

我无法使用ftp客户端进行测试,因为它是生产服务器,我没有直接访问它。 我需要检查这个当前库的问题,因为它是bussines的一个要求。 – 2014-10-01 12:23:24

+1

EnterpriseDT.Net.Ftp是一个FTP客户端,所以我建议尝试使用另一个FTP客户端来排除上面使用的代码/库存在问题的可能性(这看起来不错)。如果另一个FTP客户端工作,那么上面的代码存在问题。如果另一个客户端无法工作,那么可能存在防火墙或FTP服务器配置问题。 – 2014-10-01 12:37:59

回答

1

您的代码看起来没问题。没有什么特别的。您应该做的第一件事是在库中启用调试日志记录,因为您没有足够的关于执行FTP代码的信息。

您可以用下面的语句启用调试:

EnterpriseDT.Util.Debug.Logger.CurrentLevel = EnterpriseDT.Util.Debug.Level.DEBUG; 

默认情况下它会打印在控制台调试信息。你可以使用自定义appender(文件,db等),如果你喜欢。调试信息将为您提供有关该问题的更多信息。

任何想法是否是超时错误?

我不这么认为。默认情况下,库中的客户端超时设置为120000毫秒。服务器超时可能要高得多。我不认为这是一个超时问题。

上一个黑名单吗?

也许,但不应该挂起一个FTP客户端。

为什么没有消息或超时呢?

挂起可能是由不正确的FTP服务器或防火墙配置引起的。与大多数FTP客户端一样,EnterpriseDT.Net.Ftp默认使用FTP Passive模式。我建议检查你的FTP服务器和防火墙配置,并检查一切正确配置为被动模式。

如果您的FTP服务器配置正确,您应该能够从任何FTP客户端连接到它。您可以尝试FileZilla或任何其他客户端,只是为了确保您的服务器安装正确。这样你将排除任何防火墙或FTP服务器问题。

更新:

从我们到目前为止看到日志这是一个验证的问题。看起来SSH服务器支持密码,公钥和键盘交互式验证。

上面我的日志的解释是,您的SFTP客户端尝试与此确切顺序使用下列方法来验证:

Try: password, publickey, keyboard-interactive 

密码认证(在你的代码中的默认值)不经过( ),然后客户端切换到键盘身份验证,这就是为什么您在SSH中获得密码提示,并且SFTP库无法处理该场景,因为您没有包含提示响应。

为了解决这个问题,你应该在图书馆里检查出SSHAuthPrompt类,并包括在使用上SecureFTPConnectionKBIPrompts属性代码中的密码提示答案:

http://www.enterprisedt.com/products/edtftpnetpro/doc/manual/api/html/T_EnterpriseDT_Net_Ftp_Ssh_SSHAuthPrompt.htm

这类在构造函数中有两个参数。提示符应与您从KBI获得的内容匹配,并且应该是'Password:',响应值应该是密码。

您还应该尝试将AuthenticationMode配置为KeyboardInteractive。

+0

我现在需要什么它的问题,这是可能的,如果我尝试与其他库我可以连接到服务器,如果尝试与FileZilla太,但我的问题,这是一个需要现在为什么不从任何消息服务器,服务器崩溃8小时后的任何超时。 – 2014-10-02 10:18:53

+1

您是否尝试过像我建议的那样激活调试?你可以分享调试输出,所以我们有更多关于这个问题的信息? – 2014-10-02 11:12:18

+0

是的,我激活了这个参数,但我必须等到星期六才能得到结果。 – 2014-10-02 11:36:44

相关问题