我不确定这是否是正确的问题,但无论如何我都会这样做。
我为Umbraco CMS开发了一个上传器,让人们可以一次上传文件队列。这使用一些简单的Flash应用程序,只需调用.NET ashx一次上传一个文件。当一个完成后,下一个开始。
最近我遇到了一个问题,其中1或2个上传会很好,但其余的都会失败。这发生在他自己和他的客户身上。经过一些调试,他认为他找到了问题,但看起来很怪异,所以想知道是否有其他人有这个问题?
他和他的客户都使用光纤宽带连接,因此上传速度非常快。当它在较低速度的宽带连接上进行测试时,所有文件上传都没有问题。根据他的一位开发者朋友的说法,显然他们之前遇到过这种情况,并且不得不稍微延迟上传脚本以使其正常工作。
这听起来有可能吗?有没有其他人遇到这个问题?是否有一种已知的解决方法可以防止上传失败?
答案 0 :(得分:0)
我之前没有解决过这个问题,但我之前已经做过很多DSL和宽带故障排除的诊断,所以我会尽力回答这个问题。
此特定症状有两种可能的原因,通常都在您的网络控制之外(我原以为)。
1)丢包 当然,如果某些链接接收到非常大量的流量,那么他们可以选择仅转储大量数据(例如,所有超过该链接的最大设置大小),但是TCP / IP应该控制它,并且还期望那种排序不时掉下来的东西,所以这似乎不太可能。
2)接收服务器 可能有一些HTTP瓶颈进入该服务器甚至接收服务器CPU / RAM等可能处于容量状态。
从故障排除的角度来看,即使这些症状不应该(在理论上)存在,但他们这样做的事实,并且你有一个特定的
接下来的步骤,如果你真的需要了解它是如何工作可能是为了获得某种数据包嗅探器(如WireShark)来尝试在数据包级别解决究竟发生了什么。
Socket编程通常可以直接编程到TCP / IP套接字,因此您可以在较低的网络层进行处理,并查看响应和超时等。
此外,如果您控制接收服务器,那么您可以从该端点执行相同操作,或者至少查看错误日志以查看出现问题的原因。
一个非常基本的方法可能是在可能的情况下向接收服务器发送路径,这可能会突出显示获取服务器的慢节点或本地计算机与终端服务器之间的数据包丢失。
结果?在上传代码中放入一个减速功能,这至少应该使代码工作。
如果您需要对WireShark的任何分析,请联系。
答案 1 :(得分:0)
我在使用Flash上传程序和Firefox的MVC2网站遇到了类似的问题。服务器使用Big-IP负载平衡器进行负载平衡。我们在调试中发现的是,Firefox中的Flash没有在继续请求上发送会话ID,负载均衡器会将延续请求发送到另一台服务器。由于用户在新服务器上没有会话,因此请求失败。
如果一个文件可以在一个块中发送,它会上传很好。如果需要第二块,则失败。因此,在上传了不确定数量的文件后上传将失败。
要修复它,我写了一个Silverlight上传器。