当我尝试在 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/