Comments (4)
Hi, I usually use injected typed http clients, but today I stumbled on this advice
Using PooledConnectionLifetime with singleton instead of HttpClientFactory is new to me. I often use singleton registered services and hence have long lived instances, so according to the recommendations I linked, it would be better to use PooledConnectionLifetime instead of the HttpClientFactory.
What do you think?
from timdeschryver.dev.
Hi @snielsson good comment!
Using the singleton with PooledConnectionLifetime
is fine when you just have a single service you need to communicate with.
I see a HTTP factory as a singleton that's managed by ASP.NET.
I also find it easier to use HTTP factories when you need to work with multiple services, as each client can be configured by its own needs without interfering with the other clients.
from timdeschryver.dev.
If you want to use a typed client in a singleton service, the recommened approach is using SocketsHttpHandler
as the primary handler, and configuring the PooledConnectionLifetime
.
Since the SocketsHttpHandler
will handle connection pooling, you can disable recycling at the IHttpClientFactory
level by setting HandlerLifetime
to Timeout.InfiniteTimeSpan
.
services.AddHttpClient<GitHubService>((serviceProvider, client) =>
{
var settings = serviceProvider
.GetRequiredService<IOptions<GitHubSettings>>().Value;
client.DefaultRequestHeaders.Add("Authorization", _settings.GitHubToken);
client.DefaultRequestHeaders.Add("User-Agent", _settings.UserAgent);
client.BaseAddress = new Uri("https://api.github.com");
})
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new SocketsHttpHandler()
{
PooledConnectionLifetime = TimeSpan.FromMinutes(15)
};
})
.SetHandlerLifetime(Timeout.InfiniteTimeSpan);
from timdeschryver.dev.
Neat, thanks for the info @ngoquoctoandev
from timdeschryver.dev.
Related Issues (20)
- How to test your C# Web API HOT 1
- Using Geolocation in Playwright tests HOT 2
- Refactor Functional Tests to support Minimal Web APIs HOT 1
- Make your C# applications faster with LINQ joins HOT 1
- Using MSW (Mock Service Worker) in an Angular project HOT 3
- Prevent a Hangfire job from running when it is already active HOT 1
- Treat your .NET Minimal API Endpoint as the application layer HOT 1
- Invoke the Azure DevOps API from within your Azure DevOps pipeline HOT 4
- Using Playwright test shards in combination with a job matrix to improve your CI speed HOT 2
- Getting the most value out of your Angular Component Tests HOT 1
- Playwright API testing with zod HOT 3
- Adding OpenTelemetry to an Angular Application HOT 8
- Faster SQL Bulk Inserts With C# - Method missing
- Entity framework features I wish I knew earlier HOT 4
- Wow, your blog is awesome! HOT 1
- Comments section is broken on blog HOT 1
- 'Disable Validators' section of Signal Forms blog post not highlighting fully HOT 1
- Single Quotes in Signal Form Code Snippets
- If I use karma in angular, can I use msw to mock data? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from timdeschryver.dev.