Deciding between HttpClient and WebClient

后端 未结 6 1278
情话喂你
情话喂你 2020-11-22 14:37

Our web app is running in .Net Framework 4.0. The UI calls controller methods through ajax calls.

We need to consume REST service from our vendor. I am evaluating

6条回答
  •  攒了一身酷
    2020-11-22 15:27

    I have benchmark between HttpClient, WebClient, HttpWebResponse then call Rest Web Api

    and result Call Rest Web Api Benchmark

    ---------------------Stage 1  ---- 10 Request
    
    {00:00:17.2232544} ====>HttpClinet
    {00:00:04.3108986} ====>WebRequest
    {00:00:04.5436889} ====>WebClient
    
    ---------------------Stage 1  ---- 10 Request--Small Size
    {00:00:17.2232544}====>HttpClinet
    {00:00:04.3108986}====>WebRequest
    {00:00:04.5436889}====>WebClient
    
    ---------------------Stage 3  ---- 10 sync Request--Small Size
    {00:00:15.3047502}====>HttpClinet
    {00:00:03.5505249}====>WebRequest
    {00:00:04.0761359}====>WebClient
    
    ---------------------Stage 4  ---- 100 sync Request--Small Size
    {00:03:23.6268086}====>HttpClinet
    {00:00:47.1406632}====>WebRequest
    {00:01:01.2319499}====>WebClient
    
    ---------------------Stage 5  ---- 10 sync Request--Max Size
    
    {00:00:58.1804677}====>HttpClinet    
    {00:00:58.0710444}====>WebRequest    
    {00:00:38.4170938}====>WebClient
        
    ---------------------Stage 6  ---- 10 sync Request--Max Size
    
    {00:01:04.9964278}====>HttpClinet    
    {00:00:59.1429764}====>WebRequest    
    {00:00:32.0584836}====>WebClient
    

    _____ WebClient Is faster ()

    var stopWatch = new Stopwatch();
            stopWatch.Start();
            for (var i = 0; i < 10; ++i)
            {
                CallGetHttpClient();
                CallPostHttpClient();
            }
    
            stopWatch.Stop();
    
            var httpClientValue = stopWatch.Elapsed;
    
            stopWatch = new Stopwatch();
    
            stopWatch.Start();
            for (var i = 0; i < 10; ++i)
            {
                CallGetWebRequest();
                CallPostWebRequest();
            }
    
            stopWatch.Stop();
    
            var webRequesttValue = stopWatch.Elapsed;
    
    
            stopWatch = new Stopwatch();
    
            stopWatch.Start();
            for (var i = 0; i < 10; ++i)
            {
    
                CallGetWebClient();
                CallPostWebClient();
    
            }
    
            stopWatch.Stop();
    
            var webClientValue = stopWatch.Elapsed;
    

    //-------------------------Functions

    private void CallPostHttpClient()
        {
            var httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri("https://localhost:44354/api/test/");
            var responseTask = httpClient.PostAsync("PostJson", null);
            responseTask.Wait();
    
            var result = responseTask.Result;
            var readTask = result.Content.ReadAsStringAsync().Result;
    
        }
        private void CallGetHttpClient()
        {
            var httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri("https://localhost:44354/api/test/");
            var responseTask = httpClient.GetAsync("getjson");
            responseTask.Wait();
    
            var result = responseTask.Result;
            var readTask = result.Content.ReadAsStringAsync().Result;
    
        }
        private string CallGetWebRequest()
        {
            var request = (HttpWebRequest)WebRequest.Create("https://localhost:44354/api/test/getjson");
    
            request.Method = "GET";
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    
            var content = string.Empty;
    
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    using (var sr = new StreamReader(stream))
                    {
                        content = sr.ReadToEnd();
                    }
                }
            }
    
            return content;
        }
        private string CallPostWebRequest()
        {
    
            var apiUrl = "https://localhost:44354/api/test/PostJson";
    
    
            HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(new Uri(apiUrl));
            httpRequest.ContentType = "application/json";
            httpRequest.Method = "POST";
            httpRequest.ContentLength = 0;
    
            using (var httpResponse = (HttpWebResponse)httpRequest.GetResponse())
            {
                using (Stream stream = httpResponse.GetResponseStream())
                {
                    var json = new StreamReader(stream).ReadToEnd();
                    return json;
                }
            }
    
            return "";
        }
    
        private string CallGetWebClient()
        {
            string apiUrl = "https://localhost:44354/api/test/getjson";
    
    
            var client = new WebClient();
    
            client.Headers["Content-type"] = "application/json";
    
            client.Encoding = Encoding.UTF8;
    
            var json = client.DownloadString(apiUrl);
    
    
            return json;
        }
    
        private string CallPostWebClient()
        {
            string apiUrl = "https://localhost:44354/api/test/PostJson";
    
    
            var client = new WebClient();
    
            client.Headers["Content-type"] = "application/json";
    
            client.Encoding = Encoding.UTF8;
    
            var json = client.UploadString(apiUrl, "");
    
    
            return json;
        }
    

提交回复
热议问题