1

我正在使用网络客户端通过UploadFileAsync方法上传一个相对较大的文件(40mb) 。

当我在模拟器上进行测试时,连接速度非常快。我可以看到UploadProgressChanged被频繁调用,并在大约 20 秒内达到 100%。

但是,UploadFileCompleted没有被调用另外12 分钟!

如果我上传一个较小的文件(例如 500kb),UploadFileCompleted几乎会在上传进度达到 100% 时被调用。

我想知道这是否与线程有关?不过,我无法想象如何。

就 Web 服务器而言,它在UploadFileCompleted被调用时正式接收文件,而不是在一分钟之前。所以我的另一个想法是UploadProgressChanged是错误的。

有人有想法么?

4

1 回答 1

3

在发布之前应该看起来更深入一些。

我认为上传发生得如此之快很奇怪。发生的事情是应用程序说“上传这个!” 和 android 说'好的!'.. 它认为它已被上传。但它只是与android排在队列中。

这里有一个修复:

https://bugzilla.xamarin.com/show_bug.cgi?id=3100

基本上,从 WebClient 继承并覆盖 getwebrequest,并将AllowWriteStreamBuffering设置为 false。这是我的简单代码:

public class MyWebClient : WebClient
{
    long contentLength;

    protected override WebRequest GetWebRequest(Uri address)
    {
        var req = base.GetWebRequest(address) as HttpWebRequest;
        req.AllowWriteStreamBuffering = false;
        req.ContentLength = contentLength;
        return req;
    }

    public MyWebClient(long contentLength)
    {
        this.contentLength = contentLength;
    }
}
于 2012-08-25T07:29:36.593 回答