WebClient UploadFile 错误

Posted

技术标签:

【中文标题】WebClient UploadFile 错误【英文标题】:WebClient UploadFile errors 【发布时间】:2009-10-28 00:17:05 【问题描述】:

我正在尝试使用 System.Net.WebClient.UploadFile 将文件上传到 Web 服务器,但我不断收到 WebException。具体来说,我收到 3 个错误。我不知道为什么我没有收到相同的错误,但根据我在网上找到的内容,它们似乎都是相关的。

请求被中止:请求被取消。 连接已关闭。再试一次。 现有连接被远程主机强行关闭。

这似乎有点随机(并不总是相同的文件、时间量或我能弄清楚的任何其他模式)。此外,这不会发生在我的工作网络上(上传时间不到 2 秒),但确实发生在家里通过 DSL (上传大约需要 2 分钟)。

根据我在网上的发现,这些错误与保活有关。不幸的是,WebClient 没有提供任何关闭这些功能的方法(我不确定我是否愿意这样做,因为这是一项性能功能)。

我认为这可能与超时有关,但我不知道为什么。服务器是 ASP.Net MVC,超时设置为一小时。

    <httpRuntime
        maxRequestLength="10024" 
        executionTimeout="3600"
        /><!-- 10024 = 10MB, 3600 = 1hr -->

我对解决此问题的两种方法都感兴趣,因此它不会发生,还有恢复技术(简单地再次发出请求似乎没有效果)。

一些背景知识,这是用于将照片上传到服务器的 WinForms 应用程序。服务器是一个 ASP.Net MVC 应用程序。客户端已经正常工作了很长时间,但现在失败了,因为我将它切换到 ASP.Net MVC(它使用经典的 ASP 和 SA FileUp)。客户端只是为了适应新的 URL 而改变,除此之外它几乎是一样的。

【问题讨论】:

【参考方案1】:

异常“请求已中止:请求已取消。”如果 WebClient 在文件传输期间超时,则会引发。如果没有进行文件传输,您将看到“操作已超时”。

客户端发生超时。 WebClient 不允许您设置超时,HttpWebRequest(WebClient 使用的)的默认值为 100 秒。我想我必须弄清楚使用 HttpWebRequest 时如何获得进度。我还必须弄清楚为什么 ASP.Net 文件传输比使用 SAFileUp 和经典 ASP 慢。

更新:我创建了一个 WebHelper 类,它代替了 WebClient,但提供了对底层 WebRequest 的必要功能的更多访问。它还通过 WebClient 提供了许多附加功能。如果您有兴趣,可以在 CodePlex 上的BizArk project 中找到它。

【讨论】:

以上是关于WebClient UploadFile 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何接收从 WebClient.UploadFile() 发送的文件?

我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?

无法从 C# Rest 服务获取 WebClient.UploadFile

当服务器具有有效的 SSL 证书时,将 WebClient.UploadFile() 与“https”一起使用时出现“握手失败...意外的数据包格式”

C# WebClient 使用 UploadString 从 ApiController 调用 HttpPost 方法也在 C# 中。 415 或 400 错误

使用WebClient进行文件上传