서버에 데이터를 POST하는 메소드가 있습니다. 서버가 aswer를 반환 할 수 있습니다. URL을 변경하고 다른 서버로 데이터를 보내야합니다. 나는 4.5 프레임 워크에서 HttpClient
클래스를 사용한다. 리디렉션이 필요하지 않을 때까지 do-while 루프를 사용하여 요청을 반복합니다. 그러나 문제가 있습니다.HttpClient 및 do-while 루프 기다리기
나는 일어나지 않았다 await
초 루프 외부 HttpClient
인스턴스를 생성하고 내 programm에 루프에서 얻을 수 있지만, 만약 내가 다시하고 다시 루프 내부에 HttpClient
인스턴스를 만드는 경우 왜 질문은 - 모든 괜찮? 비동기 메서드 내부의 do-while 루프 안에 여러 POST 요청에 하나의 HttpClient
을 재사용 할 수 있습니까?
내 작업 코드 샘플 :
public async Task<bool> GameLogin()
{
var clientHandler = new HttpClientHandler
{
CookieContainer = this.myCContainer,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
};
var client = new HttpClient(clientHandler);
client.DefaultRequestHeaders.Add("client-ver", Versoin);
client.DefaultRequestHeaders.Add("method", "SignIn");
client.DefaultRequestHeaders.Add("authKey", AppParams["auth_key"].ToString());
var content = new StringContent(this.SendStr);
JToken r;
do
{
var answer = await client.PostAsync(this.CurrentUrl, content);
var rawString = await answer.Content.ReadAsStringAsync();
DinamicData = JObject.Parse(rawString);
r = DinamicData["r"];
if (r == null) continue;
this.CurrentUrl = string.Format("http://{0}/main.ashx", r);
} while (r != null);
return DinamicData.Type != JTokenType.Null;
}
을 그리고 내 두 번째 코드는 secont 루프 차례로 await
을 기다리지 않았다
public async Task<bool> GameLogin()
{
JToken r;
do
{
var clientHandler = new HttpClientHandler
{
CookieContainer = this.myCContainer,
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
};
var client = new HttpClient(clientHandler);
client.DefaultRequestHeaders.Add("client-ver", Versoin);
client.DefaultRequestHeaders.Add("method", "SignIn");
client.DefaultRequestHeaders.Add("authKey", AppParams["auth_key"].ToString());
var content = new StringContent(this.SendStr);
var answer = await client.PostAsync(this.CurrentUrl, content);
var rawString = await answer.Content.ReadAsStringAsync();
DinamicData = JObject.Parse(rawString);
r = DinamicData["r"];
if (r == null) continue;
this.CurrentUrl = string.Format("http://{0}/main.ashx", r);
} while (r != null);
return DinamicData.Type != JTokenType.Null;
}
내 코드 샘플을 작동하지 않았다.
그럼 당신은 기다리지 않았다고 말합니다 - 무슨 일이 일어 났습니까? 예외가 있었습니까? –
동일한 HttpClient를 재사용 할 때 사실상 하나의 세션에 있다는 점에 유의하십시오. 이는 인증 등이 어떻게 처리되는지에 영향을 줄 수 있습니다. HTTP 레벨에서 어떤 일이 일어나는지 살펴 보는 것이 유용 할 것입니다. WireShark와. –
나는'대답 '을 얻지 못했습니다. 내 앱이'GameLogin' 메소드의 do-while 및 out을 벗어난다. – Jagget