我正在使用网络客户端通过 UploadFileAsync 方法上传相对大文件(40mb)。
当我在模拟器上测试时,连接速度非常快。我可以看到 UploadProgressChanged 经常被调用,并在大约20秒内达到100%。
然而, UploadFileCompleted 不会被另外 12分钟调用!!
如果我上传较小的文件(例如500kb),则只要上传进度达到100%,就会立即调用 UploadFileCompleted 。
我想知道这是否与线程有关?但我无法想象。
就Web服务器而言,它会在 UploadFileCompleted 被调用时正式接收文件,而不是一分钟之前。所以我的另一个想法是 UploadProgressChanged 是错误的。
有人有什么想法吗?
答案 0 :(得分: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;
}
}