gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:46:41 24 4
gpt4 key购买 nike

我在使用 Renci SSH SFTP 将文件从 ASP.NET 服务器上传到我们的 CDN (Akamai) 时遇到问题。在启动问题之前,我们一直在使用 FTP 上传媒体,超过 ~50MB 的任何内容都会开始出现 502 Bad Gateway 问题。由于无论如何我们都想更新到 SFTP 以确保安全,因此我们将 FTP 代码换成 SFTP 以查看问题是否仍然存在。在我们的开发和 QA 环境中,这似乎可以解决这个问题,但不可否认,它的流量比我们的产品服务器低得多。投入生产后,我们上传了大约 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”。在网络配置中,我们将 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 慢得多。我听说其他公司也发生过这种情况,对此我并不感到惊讶,但这可能有助于解决问题。

有人知道是什么原因造成的吗?

最佳答案

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

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

关于c# - Renci SSH.Net SFTP 间歇性连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com