簡體   English   中英

將異步HttpWebResponse與C#中的HttpWebRequest匹配

[英]Match an asynchronous HttpWebResponse to a HttpWebRequest in C#

我正在使用C#對HTTP流水線功能進行一些測試。 一切正常,但我有一個問題。

在類中,我有以下代碼,允許我異步獲取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#如何將響應與請求相匹配? 它是ack和seq數字嗎?

C#不進行匹配。 它由操作系統處理。 請記住,這些HTTP請求和響應正在通過TCP傳輸和接收。 TCP實現將低級響應與請求相匹配,操作系統中的異步I / O層將TCP內容與C#回調進行匹配。

這是一個簡化的解釋,但基本上是正確的。 如果您需要更多細節,則必須閱讀操作系統內部,特別是Windows I / O的實現,特別是TCP的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM