c# - 用于 POST 请求的 Xamarin WebClient 速度极慢

标签 c# http post xamarin

当我尝试在 Xamarin 中发出 POST 请求时,函数 GetRequestStream() 花费的时间为 10-20 秒。我的服务器上的应答时间低于 1 秒,我从网站发出的 POST 请求也是如此。

我已经尝试过:

  • 将代理服务器设置为 null,这样它就不会查找
  • 在请求周围使用 block ,以便刷新它
  • 增加最大连接数
  • 通过异步多线程完成所有工作
  • 甚至尝试了另一个名为 RestSharp 的类 - 相同的结果。

我所做的任何事情实际上都没有帮助减少运行时间,哪怕是 100 毫秒。我只是无法想象这是 Xamarin 的错,因为我不可能是唯一一个决定在他的跨平台应用程序中执行一些 HTTP 请求的人。我已经丢失了 UWP,因为 UWP 不支持我用来连接到 TLS 站点的 ServiceManager - 谢谢 Xamarin。

我真的需要解决方案,所以请帮忙:)


这是我使用和优化的代码:

byte[] byteArray = Encoding.UTF8.GetBytes(query);
HttpWebRequest webRequest = new HttpWebRequest(uri);
webRequest.Method = "POST";
webRequest.Proxy = null;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Timeout = 1000;
webRequest.ReadWriteTimeout = 1000;
Stream dataStream = await webRequest.GetRequestStreamAsync();
await dataStream.WriteAsync(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse webResponse = await webRequest.GetResponseAsync();
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
{
     string ret = await reader.ReadToEndAsync();
     return ret;
}

这是我在 ModernHttpClient 中尝试的代码

System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(new NativeMessageHandler());
Dictionary<string, string> values = new Dictionary<string, string>();
string[] q = query.Split('&');
for (int i = 0; i < q.Length; i++)
     values.Add(q[i].Split('=')[0], q[i].Split('=')[1]);
FormUrlEncodedContent content = new FormUrlEncodedContent(values);
HttpResponseMessage response;
try
{
     response = await client.PostAsync(uri, content);
     string answer = await response.Content.ReadAsStringAsync();
     return answer;
}
catch (Exception e)
{
     return "";
}

当然,我在调用整个网络之前添加了这些行

ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 100;

这绝对是 Xamarin 或 Android 问题。我没有其他设备来测试它,但是......我现在能做什么?我在 .Net 控制台应用程序上测试了它,所以它绝对与 .Net 无关。

最佳答案

我刚刚找到了答案! 当我设置协议(protocol)版本时,它会加速。它基本上没有被提及,但我在谷歌上搜索了 android post speeddowns,最后我找到了它。 将协议(protocol)版本设置为 HTTP 1.1 速度非常快!

现在我只需要使用 xamarin 修复启动延迟>.<

非常感谢您的帮助!

关于c# - 用于 POST 请求的 Xamarin WebClient 速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801166/

相关文章:

c# - View 中的属性必须与 ViewModel 中的相同属性匹配

python - 如何在 C++ 中使用 CPR 库?

android - 在 Android 应用程序中创建服务器

node.js - 如何验证来自另一台服务器的用户 session ?

javascript - 如何设置简单的 firebase ajax 请求?

javascript - 使用javascript发送post请求

json - 如何使用 Netty 4.0.17 发送带有 JSON 正文的 POST 请求

c# - 线程中的异常处理,联系 WCF 服务

c# - Entity Framework : Creating custom properties

java - 在iText7中创建PdfTextFormField专门用于数字输入