2

我正在尝试使用 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,除此之外它几乎相同。

4

1 回答 1

2

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

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

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

于 2009-11-13T02:24:44.153 回答