热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在糟糕的网络条件下处理文件HttpClient.PostAsync文件上传?

如何解决《如何在糟糕的网络条件下处理文件HttpClient.PostAsync文件上传?》经验,谁能帮忙解答一下?

我正在开发一个以将多张照片上传到网络API为中心的移动应用.我正在使用Xamarin.Forms和System.Net.Http.HttpClient,以及Clumsy来模拟糟糕的网络状况(滞后,丢包,无序数据包).该应用程序最初是用Titanium编写的,并且对大多数用户来说都很好,但是一些移动网络不佳的用户却经常出错.展望未来,我们正在移植到Xamarin并尝试适应连接不良的用户.

using (var httpClient = CreateClient())
        {
            httpClient.Timeout = TimeSpan.FromMinutes(5);
            using (var formData = new MultipartFormDataContent())
            {
                // add required fields via formData.Add() ...

                var httpCOntent= new ByteArrayContent(imageData);
                formData.Add(httpContent, "file", Guid.NewGuid() + ".jpg");

                try
                {
                    var respOnse= await httpClient.PostAsync("fileupload", formData).ConfigureAwait(false);

                    if (response.IsSuccessStatusCode)
                    {
                        respOnseObject= await ResponseMessageToResponseModel(response).ConfigureAwait(false);
                    }
                }
                catch (HttpRequestException ex)
                {
                    Debug.WriteLine("HttpRequestException");
                }
                catch (TaskCanceledException ex)
                {
                    Debug.WriteLine("TaskCanceledException");
                }
            }
        }

我发现的是,一切都在正常条件下按预期工作; 当使用"滞后,丢弃,无序"启用Clumsy并尝试上载时,PostAsync()永远不会完成,并最终超时与TaskCanceledException.奇怪的是文件最终在服务器上..所以POST数据显然已经通过了.

我猜测从服务器响应中丢弃的数据包意味着HttpClient从未收到正确的响应,并继续等待一个直到它超时.

为了达到这一点,我想知道是否有人对如何使这个过程尽可能防弹有任何想法.如果文件第一次完成,只是捕获超时并再次尝试不能很好地工作.有什么想法吗?

此外,有关HttpClient如何处理丢弃/无序数据包的任何信息,以便我可以更好地了解正在发生的事情也会很棒.


推荐阅读
author-avatar
h53695088
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有