Oma*_*ine 5 .net c# file-upload
我有一些相当简单的代码,可以将照片或视频上传到端点(使用HTTP PUT或POST).我经常看到连接关闭异常抛出,实际上照片/视频上传得很好,它调用GetResponse发生异常.
我注意到的一件事是GetResponse需要花费很长时间才能完成.通常比照片到服务器的实际上传时间长.我的代码使用RequestStream.Write写入Web服务器.
我做了一点测试,上传了大约40张照片/视频到服务器,大小从1MB到85MB不等,GetResponse返回的时间是3到40秒.
我的问题是,这是正常的吗?这仅仅是我上传这些文件的服务器需要多长时间来处理我的请求并做出响应?在查看Fidder HTTP跟踪时,似乎就是这种情况.
仅供参考,我的上传是HTTP 1.0,超时值设置为无限(Timeout和ReadWriteTimeout)
如果服务器真的需要很长时间才能返回任何数据(如Fiddler所示)那么这就是它的原因.上传85MB附件需要很长时间才能开始,然后服务器必须处理它.你不能做很多事情 - 除了使用异步方法,如果你能够在调用返回之前继续做更多的工作.
现在还不完全清楚Fiddler向你展示的是 - 它是否在服务器发送响应之前显示了很长时间?如果是这样,那么你无能为力.无可否认,我很惊讶连接正在关闭.但是,如果您没有看到您的数据被写入服务器一段时间,则这是另一回事.
你是否处理了返回的回复?如果没有,您可能有连接保持活着.如果它是明确的HTTP 1.0,这应该不是问题,但它是我经验中"挂起"Web调用的最常见原因.
基本上,如果你不处理WebResponse它通常(至少使用HTTP 1.1和keepalive)保持连接.可以对单个主机开放的连接数量有限制,因此您可能最终等待,直到较早的响应完成,然后才能继续下一个响应.
如果这是问题,一个简单的using陈述就是答案:
using (WebResponse response = request.GetResponse())
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5067 次 |
| 最近记录: |