3

您好我正在使用 WebRequest 的异步成员将文件上传到 IIS ftp 服务器。

我可以成功上传两个文件。但是第三个文件上的 BeginGetResponse 从不调用我的回调例程!

欢迎任何想法?

谢谢,

约翰

4

2 回答 2

1

感谢您的答复。我发现我的问题出在 ServicePoint.Connection.Limit

我将此值增加到 4 并开始使用同步方法。我的 FTP 东西现在可以根据需要上传文件。

但是,尽管我可以验证我的文件是否完好无损地到达服务器,但大多数时候流上的 Close() 方法会引发 Web 异常,抱怨连接已关闭。

我已经尝试过 KeepAlive,但只减少了大约 10%(非常粗略)的传输异常。

我忽略了这些错误,因为我能够确认发送的字节数 == 文件总字节数,但这并不绅士。

我不太确定如何解决这个问题;我花了几天时间谷歌搜索,发现有类似问题但没有真正答案的人。

暂时我必须继续我的项目的其余部分,因为时间很短,如果您对如何防止底层连接关闭有任何想法(我猜是控制通道掉线了),我会很感激您见解。

约翰。

于 2009-10-06T10:39:32.267 回答
1

一些想法:

  • 同步发出请求,看看问题是否消失。如果不是,则开始仔细查看第三个文件(是 HUUUUUUUUUGE 吗?)
  • 确保您在回调处理程序中明确调用FtpWebRequest.EndGetResponse(),然后在响应中调用 Close()。否则,您将面临打开连接的风险,并且可能会遇到客户端、服务器或代理连接限制。
  • 如果您已经在做这些事情,请安装像Network Monitor 3.3这样的网络嗅探器,然后查看网络上实际发生的情况。您将能够在那里看到任何错误。
  • 如果您发现错误,请追踪它们。如果您从未真正看到第三个请求通过网络,请将客户端连接限制视为罪魁祸首。如果您看到第三个请求通过网络,但没有响应,请查看服务器问题,例如在 M 秒内限制来自同一客户端的 N 个请求 - 并尝试在每个请求后延迟,看看您是否可以避免这种情况。
于 2009-10-05T19:03:36.253 回答