Renci SSH.Net SFTP间歇性连接问题

时间:2016-11-07 22:15:50

标签: c# asp.net webforms sftp ssh.net

我在使用Renci SSH SFTP将文件从ASP.NET服务器上传到我们的CDN(Akamai)时遇到问题。在启动问题之前,我们一直在使用FTP来上传媒体,超过50MB的任何内容都会出现502 Bad Gateway问题。由于我们还想更新到SFTP的安全性,我们换掉了SFTP的FTP代码,看看问题是否仍然存在。在我们的开发和QA环境中,这似乎解决了这个问题,但可以肯定的是,流量比我们的prod服务器低得多。一旦投入生产,我们上传了大约3k,其中大约30%的上传失败,出现以下错误,源于Renci SSH.Net

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

有趣的是,只有在ASP.NET执行代码时才会发生这种情况。我创建了一个调用Services.dll的控制台应用程序,提供了媒体文件的路径,并提供了一个大小合适的测试媒体列表,范围从800 KB到187 MB。当作为控制台应用程序在服务器上运行时,不会抛出任何错误。因此,我认为问题出现在ASP.NET,IIS或某些我不知道的服务器设置中。

我们的防火墙设置为允许通过端口22与Akamai进行ssh通信,我让我的团队为每个负载均衡服务器验证。由于控制台应用程序运行正常,我不认为这是问题。但值得一提的是我看了

调用上传媒体项目的管理面板位于aspx页面上,我现在称之为“upload.aspx”。在web配置中,我们将upload.aspx的执行超时时间扩展到:

<location path="path/to/upload.aspx">
  <system.web>
    <httpRuntime maxRequestLength="204800" executionTimeout="2700" />
  </system.web>
</location>

以下是进行连接的代码

using(var client = new SftpClient(GetConnectionInfo()))
{
    client.ConnectionInfo.Timeout = TimeSpan.FromMinutes(5);

    //This is the line that is hit before the error.
    //It attempts to connect for about 20 seconds and throws an error.
    //Happens with or without ConnectionInfo.Timeout being set.
    client.Connect();

    //perform logic to upload file, then disconnect
    client.Disconnect();
}

最后一点,上传任何文件的时间长度明显慢于使用FTP。我听说其他公司正在发生这种情况,对此并不感到惊讶,但它可能有助于排除问题。

有没有人有任何想法可能导致这个?

1 个答案:

答案 0 :(得分:0)

您需要更改操作系统的 TCP 设置 Max SYN Retransmissions。 Windows 的默认值为 21。您只能使用 client.ConnectionInfo.Timeout 降低超时时间。

更多信息在这里:https://github.com/sshnet/SSH.NET/issues/183#issuecomment-299283600