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

C# Renci SSH.Net SFTP间歇性连接问题,c#,asp.net,webforms,sftp,ssh.net,C#,Asp.net,Webforms,Sftp,Ssh.net,我在使用Renci SSH SFTP将文件从ASP.NET服务器上载到我们的CDN(Akamai)时遇到问题。在启动该问题之前,我们一直在使用FTP上传媒体,任何超过50MB的内容都会出现502个坏网关问题。因为我们想升级到SFTP以保证安全性,所以我们将FTP代码换成了SFTP,以查看问题是否仍然存在。在我们的开发和质量保证环境中,这似乎解决了这个问题,但无可否认,它的流量比我们的prod服务器低得多。一旦投入生产,我们有大约3k次上传,其中约30%的上传失败,错误源于Renci SSH.Ne

我在使用Renci SSH SFTP将文件从ASP.NET服务器上载到我们的CDN(Akamai)时遇到问题。在启动该问题之前,我们一直在使用FTP上传媒体,任何超过50MB的内容都会出现502个坏网关问题。因为我们想升级到SFTP以保证安全性,所以我们将FTP代码换成了SFTP,以查看问题是否仍然存在。在我们的开发和质量保证环境中,这似乎解决了这个问题,但无可否认,它的流量比我们的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或我不知道的某些服务器设置中

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

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

<location path="path/to/upload.aspx">
  <system.web>
    <httpRuntime maxRequestLength="204800" executionTimeout="2700" />
  </system.web>
</location>
最后一点需要注意的是,上传任何文件的时间长度明显比使用FTP慢。我听说其他公司也发生过这种情况,对此并不感到惊讶,但这可能有助于解决问题


有人知道是什么导致了这种情况吗?

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

更多信息请点击此处:

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();
}