HttpClient vs HttpWebRequest

前端 未结 3 1229
一向
一向 2020-12-02 15:27

I have a large file which I have to send to a web api client...The data is multi part. The issue is , if the file is sent over http web request, then it is uploaded quickly

相关标签:
3条回答
  • 2020-12-02 15:52

    HttpClient is more like a head-less browser. It a powerfull and ideal tool if you are going to be creating many http request. For example you can set default headers and stuff. Here are the top 5 ways it differs from an HttpWebRequest which is taken from here

    1. An HttpClient instance is the place to configure extensions, set default headers, cancel outstanding requests and more.
    2. You can issue as many requests as you like through a single HttpClient instance.
    3. HttpClients are not tied to particular HTTP server or host; you can submit any HTTP request using the same HttpClient instance.
    4. You can derive from HttpClient to create specialized clients for particular sites or patterns
    5. HttpClient uses the new Task-oriented pattern for handling asynchronous requests making it dramatically easier to manage and coordinate multiple outstanding requests.
    0 讨论(0)
  • 2020-12-02 16:00

    I was using FileStreamContent with httpclient...But when I used ByteArrayContent, it worked fine.

    I am not sure how and why this made the difference, but sending bytes over the stream is a better way rather than sending the stream

    0 讨论(0)
  • 2020-12-02 16:02

    Perhaps you were instantiating HttpClient in a using block which could explain performance issues. E.g.

      using (var httpClient = new HttpClient() )
      {
          var result = await httpClient.GetAsync("http://example.com");
          Console.WriteLine(result.StatusCode);
      }
    

    Here the instance of HttpClient is being disposed immediately after the request whereas it should arguably be a long lived object (E.g. the lifetime of the application).

    [edit - added context]

    Disposing the instance also closes the connection but leaves the socket in a waiting state for a set duration. For each execution of this code, the os will attempt to create a new socket connection, and since there is a limit to how quickly this can be completed, performance/reliability issues can arise.

    Reusing the same HttpClient instance means better reuse of open sockets and more efficient use of system resources.

    More info here.

    0 讨论(0)
提交回复
热议问题