IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Utilisation de HttpClient avec variable static privée


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Par défaut Utilisation de HttpClient avec variable static privée
    Bonjour,

    En réalisant récemment des tests de performance sur la manière d'appeller un WebService, j'ai pu observé que le fait d'utiliser une même variable static HttpClient améliorait fortement mes appels au WebService.

    Voici les liens qui m'ont amené à utiliser HttpClient et à utiliser une variable static "partagée"

    http://www.diogonunes.com/blog/webcl...ttpwebrequest/
    http://aspnetmonsters.com/2016/08/20...tpclientwrong/


    J'ai toujours utilisé de manière indifférenciée les classes WebClient, HtpWebRequest ou HttpClient.

    Le premier lien cité m'a donc amené à me concentrer sur l'utilisation de la classe HttpClient.



    Ensuite, pour chaque appel à un WebService j'ai toujours créé une instance de ma classe, renseigné les différents paramètres, puis appelé mon service et traiter la réponse.



    En tombant sur le deuxième lien j'ai donc mis en place une variable privée static HttpClient que j'utilise à chaque appel. Ainsi je ne créé plus une instance HttpClient à chaque appel.

    En réalisant des tests de perfs sur un web service simple je suis passé de 1200 ms en moyenne à 80 ms.



    J'ai un autre projet appelant également des webservices mais pour lequel j'ai un environnement beaucoup plus "concurrentiel" avec beaucoup de requête arrivant en parallèle et pouvant utiliser cette instance HttpClient.

    Du coup je me demandais si il y avait des limites ou contre-indication au fait d'utiliser une variable privée static HttpClient "partagée" au lieu d'en créé une à chaque requête.



    Cordialement,

    Christophe.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Par défaut
    Voici une réponse satisfaisante reçu sur le site msdn:

    Bonjour,

    En effet la création/disposition d'un HttpClient est assez couteuse, donc en fonction du besoin, on peut l'utiliser dans une variable statique ou un wrapper singleton.

    Concernant l'accès concurrentiel, d'après la documentation https://docs.microsoft.com/fr-fr/dot....7.2#remarques les méthodes CancelPendingRequests, DeleteAsync, GetAsync, GetByteArrayAsync, GetStreamAsync, GetStringAsync, PostAsync, PutAsync, SendAsync sont thread-safe.

    Après le test est assez rapide a faire pour vérifier qu'il n'y a pas de problème particulier.

    Cordialement,



    Yan Grenier

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Comme l'indique la doc :
    HttpClient est destiné à être instancié une seule fois et réutilisées tout au long de la durée de vie d’une application. Le nombre de sockets disponibles sous des charges lourdes arriveront à l’instanciation d’une classe HttpClient pour chaque demande. Cela entraîne des erreurs de SocketException. Voici un exemple utilisant HttpClient correctement.
    Et ce paragraphe est suivi d'un exemple de code :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class GoodController : ApiController
    {
        // OK
        private static readonly HttpClient HttpClient;
     
        static GoodController()
        {
            HttpClient = new HttpClient();
        }
    }
    Aucun mystere ici, et aucune contre indication
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Utilisation de Sumproduct avec variables
    Par MpmVb dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/08/2010, 14h49
  2. [POO] Problème avec une variable static
    Par grimsk dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2006, 01h58
  3. [XSL] utilisation du mode avec une variable
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/04/2006, 10h12
  4. [C++] Pb avec les variable static dans les classe
    Par quantik-revolution dans le forum C++
    Réponses: 3
    Dernier message: 03/03/2006, 18h40
  5. Variable static avec thread
    Par oxor3 dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 27/08/2004, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo