웹 요청에서 사용자 지정 값을 보내야만 상황이 발생하여 응용 프로그램의 응답에서 사용할 수 있습니다. 내 응용 프로그램이 여러 요청을 보낼 수 있으므로 각 요청을 비동기 적으로 보내려면 BeginGetResponse을 사용하고 있습니다.BeginGetResponse 콜백에서 사용할 요청이있는 사용자 지정 값 전달
현재 개인 변수를 사용하여 값을 캐싱하고 콜백 메소드에서 액세스하고 있습니다. 이전 요청에서 응답을 받기 전에 동일한 메소드가 호출 된 경우 데이터가 변경 될 수 있으므로 문제 해결을 요청하는 것으로 알고 있습니다.
응답에서 응답을 처리하기 위해 요청에서 데이터를 전달하는 가장 좋은 방법은 무엇입니까? 당신은 request
과 id
를 포함하는 새로운 객체를 생성해야
public void SendRequestAsnyc(string param1, string param2, string uri, int id)
{
NameValueCollection @params = System.Web.HttpUtility.ParseQueryString(String.Empty);
@params.Add("param1", param1);
@params.Add("param2", param2);
byte[] data = UTF8Encoding.UTF8.GetBytes(@params.ToString());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Post;
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
// take a note of data to be processed in the callback
_cachedId = id;
IAsyncResult ar = request.BeginGetResponse(new AsyncCallback(GetAsyncResponse), request);
}
private void GetAsyncResponse(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
if (request.HaveResponse)
{
var response = (HttpWebResponse)request.EndGetResponse(result);
var reader = new System.IO.StreamReader(response.GetResponseStream());
var data = reader.ReadToEnd();
// process data
// use _cachedId here to update database with response
}
}
+1 나는 결코 그렇게 생각하지 못했다고 생각합니다 ... 내가 너무 오랫동안 그걸 쳐다 보았다고 생각합니다! – James
나는 또한 아주 멋지고 똑똑한 맞춤 클래스를 만들 수있었습니다. 왜 그런지 생각하지 않았을 것입니다. 왜 그런지, 그것은 람다 표현 과부하와 같습니다. – JabberwockyDecompiler