我正在使用C#测试HTTP pipelining功能。一切都运行正常,但我有一个问题。
在一个类中,我有以下代码可以异步获取HTTPWebRequest并处理响应:
在一个类中,我有以下代码可以异步获取HTTPWebRequest并处理响应:
public void getResponseAsync()
{
RequestState rs = new RequestState();
rs.Request = this.webRequest; //On ajoute la requete dans l'objet état pour pouvoir le récupérer dans la callback
IAsyncResult ar = rs.Request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), rs); // Appel asynchrone
}
public void ResponseCallback(IAsyncResult ar)
{
RequestState rs = (RequestState)ar.AsyncState; //Récupération de l'objet etat
HttpWebRequest req = rs.Request; //Récupération de la requete web (object HttpWebRequest)
try //Récupération de la réponse Web
{
HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar);
this.incomingBuffer = Helpers.getBufferFromStream(resp.GetResponseStream());
resp.Close();
this.state = true;
}
catch (Exception)
{
this.state = false;
}
}
}
// La classe RequestState est utilise pour transmettre l'objet HttpWebRequest
// a travers l'appel asynchrone
public class RequestState
{
public HttpWebRequest Request;
public RequestState()
{
Request = null;
}
}
这段代码可以正常工作,但我不理解c#的运作方式。我不理解c#如何识别响应报文并将其与我的请求相关联?因为在HTTP规范中,HTTP响应中没有“标识符”。
那么c#是如何将响应和请求匹配的?是通过确认和序列号吗?
HTTP
响应由在IAsyncResult ar = rs.Request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), rs);
上调用的async
线程接收。每个异步请求都将有一个与之关联的线程。 - abhinav