Skip to content
This repository was archived by the owner on Nov 16, 2023. It is now read-only.

moved setting the base url and the management key header to a common place for all consumers#20

Open
smstuebe wants to merge 1 commit intomicrosoft:masterfrom
smstuebe:master
Open

moved setting the base url and the management key header to a common place for all consumers#20
smstuebe wants to merge 1 commit intomicrosoft:masterfrom
smstuebe:master

Conversation

@smstuebe
Copy link

Pull actual API parameters and technical API parameters apart.

@msftclas
Copy link

msftclas commented Oct 19, 2018

CLA assistant check
All CLA requirements met.

{
// Here we set up the stuff that is the same in each http request for our api.
// In this case it's the base url and the api management key header.
var client = new HttpClient
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we possibly reuse the HTTP Client if we've already created one? Currently we'd be creating a new client for each request.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can. I thought about it, but didn't want to introduce side effects regarding DNS cache stuff. If you wan't just add Lazy<HttpClient> :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we we're originally new-ing up an instance of HttpClient for every request so your change isn't breaking the existing solution but rather brought to my attention to something we could improve.

I'm guessing the DNS caching side effect you mention is related to the HttpClient instance holding DNS info for 2 minutes? If thats the case then we should* be safe given we use API Management in production and the DNS is locked down and not changing but with that said, I think we can make this all work nicely...

One vs multiple clients
To quote the docs on HttpClient:

HttpClient is intended to be instantiated once and re-used throughout the life of an application. Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads. This will result in SocketException errors.

Sockets can be held for up to 4 minutes per request so this might actually be causing our network stability issues when we send too many requests. I'd love @robinmanuelthiel to share his thoughts on this as well.

Possible solution to DNS Cache with 1 instance
We could use set the DnsRefreshTimeout property of ServicePointManager class to set our own DNS refresh timeout to something more sensible (if we REALLY needed to). This could help mitigate any issues with DNS caching.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't get me wrong. I'm pro caching, too. I just did not want to change the current behavior :P

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants