Xamarin에서 POST 요청을 만들 때 GetRequestStream()
함수의 시간은 10-20 초입니다. 내 서버의 응답 시간은 1 초 미만이므로 웹 사이트에서 POST 요청을합니다.POST 용 Xamarin WebClient 요청이 매우 느립니다.
:
- 그것의가 는
- 했던 최대 연결 수를 증가 플러시 수 있도록이 요청 주위에 블록을 사용하여
- 을 보이지 않는 것 때문에 null로 프록시 서버 설정 비동기 멀티 스레딩을 포함한 모든 것
- RestSharp라는 또 다른 클래스를 사용해도 마찬가지입니다.
아무 것도 실제로 100 밀리 초까지 런타임을 줄이는데 도움이되었습니다. 나는 크로스 플랫폼 애플리케이션에서 일부 HTTP 요청을하기로 결정한 유일한 사람이 아니기 때문에 Xamarins의 잘못이라고 생각할 수 없습니다. ServiceManager가 TLS 사이트에 연결하는 데 사용하기 때문에 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;
그것은 확실히 자 마린 또는 안드로이드 문제입니다. 나는 테스트 할 다른 장치가 없지만 ... 지금 무엇을 할 수 있습니까? .NET 콘솔 응용 프로그램에서 테스트 했으므로 .NET과 관련이 없습니다.
앱을 제작하고 다른 장치에서이 기능을 실행 해 보았습니까? 장치마다 다를 수 있습니다. –
다른 서버에 요청을 시도하고 응답을 받기까지 어느 정도의 시간이 걸렸는 지 확인하십시오. – Gusman
내 서버를 이미 테스트했기 때문에 서버가 아닙니다. 0.2 초 만에 응답합니다. 슬프게도 다른 장치가 없으며 해당 에뮬레이터도 실행되지 않습니다. –