2017-10-04 7 views
0

J'ai travaillé sur un projet WebApi .NET 4.6.1. Dans le cadre de ce projet, j'ai besoin d'appeler un autre WebApi et je veux utiliser le HttpClient pour le faire. De mes recherches en ligne, vous ne pouvez pas compter sur un HttpClient normal dans une clause using car il ne collecte pas les ordures correctement et peut conduire à des fuites de mémoire.Utilisation de HttpClient pour passer un appel dans un WebAPI

Par exemple. Je l'utilise actuellement comme suit:

using (HttpClient client = new HttpClient { Timeout = TimeSpan.FromSeconds(CONTENTFUL_TIMEOUT_IN_SECONDS) }) 
{ 
    responseText = await client.GetStringAsync(uri).ConfigureAwait(continueOnCapturedContext:false); 
} 

Mais comme suggéré dans d'autres articles de StackOverflow et d'autres cela a conduit à des fuites de mémoire, et la façon de contourner cela est de partager une seule instance de la HttpClient.
Par exemple. https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ HttpClientHandler/HttpClient Memory Leak

Je ne suis pas sûr mais comment configurer un « unique » partagée instance de la HttpClient à partir d'un WebAPI lui-même?

Répondre

0

Vous devriez jeter un oeil sur la façon de mettre en œuvre modèle singleton, reportez-vous - https://msdn.microsoft.com/en-us/library/ff650316.aspx

Ensuite, vous pouvez créer un singleton de HttpClient et de le rendre responsable de tous les appels HTTP de votre API.