2013-11-09 1 views
6

Win8 앱을 빌드 할 때부터 PCL (Portable Class Library) 프로젝트를 사용하기로 결정한 Windows Phone 8 프로젝트가 있습니다.HttpClient의 GetStringAsync가 신뢰할 수없는 이유는 무엇입니까?

그러나 내 Api (Azure에서)를 호출하는 동안 HttpClient의 GetStringAsync가 너무 느립니다. 나는 datetime과 GetStringAsync와 함께 몇 가지 디버그를 던졌다. 때로는 시간이 오래 걸립니다.

내가하고있는 일은 내 Azure API 사이트에서 간단한 JSON을 가져 오는 것입니다. 내 안드로이드 클라이언트가 을 가지고 있지 않습니다. 같은 데이터를 두 번째로 얻는 데 문제가 있습니다 ... 누락 된 부분이 있습니까?

셋업 꽤 정직 : 바로 전에 디버그 시간을 배치하고 거기에 await를 한 후했습니다

HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
client.DefaultRequestHeaders.Add("X-Token", "something"); 
string responseJSON = await client.GetStringAsync("url"); 

사이에 14 초입니다!

누군가가 이유를 알고 있습니까?

+0

호출 스택에서 다른 비동기 메서드가 호출 되었습니까? 당신은 항상 그들을 기다리고 있습니까? 때로는 느린 앱은'await' 대신에'.Result'를 사용하고 있음을 의미합니다. 예를 들어'string responseJSON = client.GetStringAsync ("url"). 결과;'. –

+0

당신의 우리가 돌아 오는 줄은 얼마나 큽니까? 주요 속도 차이가 있다면 WP8에서 WebClient를 사용해 보셨습니까? 웹 브라우저에서 간단하게 사용할 때의 응답 속도는 어떻습니까? –

+0

@chue x im은 그들 모두를 기다리고 있지만 지금은 그걸 실행하고 있습니다. 사용을 시도했다. 결과는 영원히 걸립니다! – Jason94

답변

-1

GetStringAsync를 GetString으로 바꾸면 실제로 비동기식으로 문제를 일으키지 만 스택에있는 것은 아닙니다.

+0

올바르게 다시 호출 할 수있는 경우 HttpClient에 GeString 메서드가 없습니다. –

+0

정확합니다. WebClient와 혼동을 일으켰습니다. https://msdn.microsoft.com/en-us/library/fhd1f0sw(v=vs.110).aspx 하나의 비동기가 있습니다. 잠재적 인 문제로 httpclient를 제거하는 데 도움이됩니다. –

4

나는 동일한 문제가있어서이 질문을 발견했습니다. 나에게있어서 문제는 HttpClient가 프록시를 사용하려고 시도하지만 대부분의 사람들은 프록시가 존재하지 않는다는 것이다. 이것이 느린 이유입니다. 초기화를 다음과 같이 변경하면 상당한 속도가 느껴집니다.

HttpClientHandler hch = new HttpClientHandler(); 
hch.Proxy = null; 
hch.UseProxy = false; 

HttpClient client = new HttpClient(hch); 
관련 문제