XamarinでPOST要求を作成しようとすると、GetRequestStream()
の機能に要する時間は10-20秒です。サーバーの応答時間は1秒以下で、POSTリクエストもWebサイトから作成しました。私はすでに試したPOST用のXamarin WebClient要求が極端に遅い
:nullにプロキシサーバーを設定する
- それはのを取得するので、それはリクエストの周りにブロックを使用
- をそれを見ないよう
- をフラッシュは、最大接続
- がした増加しました
- RestSharpという別のクラスも試しました。同じ結果です。
実際に実行時間を100ミリ秒短縮するのに役立っていたことはありませんでした。私は彼のクロスプラットフォームアプリケーションでいくつかのHTTP要求をすることを決めた唯一の人にはなれないので、これがXamarinsの欠陥だとは想像できません。 ServiceManager(TLSサイトに接続するために使用するServiceManagerはUWPではサポートされていないので、私はすでにUWPを失っています) - 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にはまったく関係ありません。
アプリを作成してその機能を別のデバイスで実行しようとしましたか?デバイス固有の可能性があります。 –
別のサーバーにリクエストを行い、応答を取得するのにどれくらいかかりましたか? – Gusman
私はすでにサーバーをテストしていて、それは0.2秒で答えるので、サーバーのことは間違いありません。 悲しいことに、私は他のデバイスを持っていないし、それらのエミュレータはあまりにも実行されません.. –