2

我不确定这是否是问这个问题的正确地方,但无论如何我都会这样做。

我为 Umbraco CMS 开发了一个上传器,它可以让人们一次性上传一系列文件。这使用了一些简单的 Flash 应用程序,它只调用一个 .NET ashx 来一次上传一个文件。一个完成后,下一个开始。

最近我有一个用户遇到了一个问题,即 1 或 2 次上传会正常,但其余的都失败了。这发生在他自己和他的客户身上。经过一些调试,他认为他找到了问题,但这似乎很奇怪,所以想知道是否有其他人遇到过这个问题?

他和他的客户都使用光纤宽带连接,因此上传速度非常快。当它在较低速度的宽带连接上进行测试时,所有文件上传都没有问题。根据他的一位开发人员朋友的说法,显然他们之前遇到过它,并且不得不稍微延迟上传脚本以使其正常工作。

这听起来可能吗?有没有其他人遇到过这个问题?是否有已知的解决方法来防止上传失败?

4

2 回答 2

0

我在使用 Flash 上传器和 Firefox 的 MVC2 网站上遇到了类似的问题。服务器使用 Big-IP 负载平衡器进行负载平衡。我们在调试过程中发现,Firefox 中的 Flash 没有在继续请求中发送会话 ID,负载平衡器会将继续请求发送到另一台服务器。因为用户在新服务器上没有会话,所以请求失败。

如果一个文件可以以一个块的形式发送,它会很好地上传。如果它需要第二个块,它就失败了。因此,在上传不确定数量的文件后,上传将失败。

为了解决这个问题,我写了一个 Silverlight 上传器。

于 2012-08-22T03:32:51.407 回答
0

我之前没有碰到过这个精确的问题,但是我之前做过很多DSL的诊断和宽带故障排除,所以会尽力回答这个问题。

这种特殊症状有两个可能的原因,通常都在您的网络控制之外(我会想到)。

1) 数据包丢失 当然,如果某些链路接收到非常大的流量,那么他们可以选择只转储大量数据(例如,所有超过该链路最大设置大小的数据),但 TCP/IP 应该控制它,并且还期望这种事情会不时下降,所以这似乎不太可能。

2) 接收服务器可能对该服务器有一些 HTTP 瓶颈,甚至接收服务器 CPU / RAM 等可能已满负荷。

从故障排除的角度来看,即使这些症状(理论上)不应该存在,但它们确实存在,并且您有特定的

如果您真的需要了解它是如何工作的,接下来的步骤可能是获取某种数据包嗅探器(如 WireShark),以尝试在数据包级别找出到底发生了什么。

此外,套接字编程通常可以直接对 TCP/IP 套接字进行编程,因此您将在较低的网络层进行处理,并查看响应和超时等。

此外,如果您控制接收服务器,那么您可以从那一端执行相同的操作,或者至少查看错误日志以查看引发的问题。

如果可能的话,一个非常基本的方法可能是向接收服务器发送路径,这可能会突出显示获取服务器的缓慢节点,或者本地计算机和终端服务器之间的数据包丢失。

结果呢?在上传代码中加入一个减速功能,这至少应该使代码工作。

如果您需要对 WireShark 进行任何分析,请与我们联系。

于 2012-08-21T03:39:45.353 回答