0
我有一個帶有POST方法的Web API控制器,如下所示。如何測試大塊物體是否被分塊?
public class MyController : ApiController
{
// POST: api/Scoring
public HttpResponseMessage Post([FromBody]ReallyLargeJSONObject request)
{
// some processing of this large json object
return Request.CreateResponse(HttpStatusCode.OK, someResponseObject);
}
....
}
這是由了HTTPClient如下
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.BaseAddress = new Uri("http://localhost");
ReallyLargeJSONObject request = new ReallyLargeJSONObject();
var task = httpClient.PostAsJsonAsync("api/my", request)
我在,在.NET 4.5,HttpClient的類流中的數據(並沒有緩衝的話)少數地方讀取消耗。這很好,因爲這樣我的服務器不會被大數據包過載。不過,我想測試這個。爲此,我將來自客戶端的ReallyLargeJSONObject實例的大小設置爲〜20MB。我還嘗試使用大包(〜1GB)。當我使用fiddler時,它只顯示一個請求去服務器。我的問題:
- 我應該看到多個請求去服務器在提琴手?
- 如果在MyController.Post方法中設置了斷點,數據流式傳輸時它是否應該多次觸發?
如果POST未被多次調用,數據分塊如何在引擎蓋下發生?數據被分塊併發送多次到服務器,對吧? –
是的,它發生在HttpClient代碼中,如果它實際上是流式傳輸數據。在數據線上,數據將被分解成符合TCP的數據包。從本質上講,數據從一個大的部分分解成許多較小的部分並通過網絡發送,然後在接收端將它們拼湊在一起,看起來像是從代碼中最初發送的確實的大公園。 –
@pauldeter我已經添加了一些額外資源,以更深入地瞭解這些網絡操作。如果你使用wireshark並觀察一下,你實際上可以看到你的數據被分成多少個數據包,以及一些有趣的底層操作。 –