2016-08-12 8 views
0

У меня есть API-интерфейс веб-интерфейса с методом POST следующим образом.Как проверить, были ли большие объекты помечены?

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 от клиента до ~ 20 МБ. Я также пытаюсь использовать даже большие пакеты (~ 1 ГБ). Когда я использую скрипт, он показывает только один запрос на сервер. Мои вопросы:

  1. Должен ли я видеть несколько запросов на сервер в скрипач?
  2. Если заданы контрольные точки в методе MyController.Post, следует ли бить несколько раз, когда данные передаются потоком?

ответ

1

Невозможно увидеть несколько запросов или метод Post, которые будут ударяться несколько раз, как это будет происходить при вызове более низкого уровня/метода.

Чтобы увидеть, как куски разбиты и отправлены по проводу, вы можете использовать что-то вроде Wireshark для мониторинга сетевой активности. При этом вы сможете увидеть, как долго он принимает, сколько пакетов используются, насколько большой каждый пакет, и т.д.

Reference https://www.wireshark.org

Чтение на потоках: Can you explain the concept of streams?

Чтение на пакеты: https://en.wikipedia.org/wiki/Packet_segmentation

+0

Если POST не вызывается несколько раз, как происходит чередование данных под капотом? Данные чередуются и отправляются несколько раз на сервер, правильно? –

+1

Да, это происходит в коде HttpClient, если он фактически передает данные. На проводе данные будут разбиты на пакеты, соответствующие TCP. По существу на проводе данные разбиваются с одной большой части на многие более мелкие части и отправляются по сети, а затем на принимающей стороне они собраны вместе и будут выглядеть как большой большой парк, который был отправлен из кода. –

+1

@pauldeter Я добавил некоторые дополнительные ресурсы для более глубокого понимания этих сетевых операций. Если вы используете wirehark и посмотрите, вы действительно сможете увидеть, сколько пакетов разделяет ваши данные и какое-то интересное действие под капотом. –