Scott Hanselman

Useful ASP.NET Core 2.2 Features

December 14, '18 Comments [9] Posted in ASP.NET | DotNetCore
Sponsored By

Earlier this week I talked about how I upgraded my podcast site to ASP.NET Core 2.2 and added Health Check features fairly easily. There's a ton of new features and so far it's been great running on my site with no issues. Upgrading from 2.1 is straightforward.

I wanted to look at just a few of these that I found particularly interesting.

You can get a very significant performance boost by moving ASP.NET Core in process with IIS.

Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. This removes the performance penalty of proxying requests over the loopback adapter when using the out-of-process hosting model.

After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. The app's response is passed back to IIS, which pushes it back out to the client that initiated the request.

HTTP Client performance improvements are quite significant as well.

Some significant performance improvements have been made to SocketsHttpHandler by improving the connection pool locking contention. For applications making many outgoing HTTP requests, such as some Microservices architectures, throughput should be significantly improved. Our internal benchmarks show that under load HttpClient throughput has improved by 60% on Linux and 20% on Windows. At the same time the 90th percentile latency was cut down by two on Linux. See Github #32568 for the actual code change that made this improvement.

HTTP/2 is enabled by default. HTTP/2 may be sneaking up on you as for the most part "it just works." In ASP.NET Core's Kestral web server HTTP/2 is enabled by default over HTTPS. You can see here at both the command line and in Chrome I'm using HTTP/2 locally.

HTTP/2 locally

Here's Chrome. Note the "h2."

HTTP/2 in Chrome

Note that you'll only be able to get HTTP/2 when ALPN (Application-Layer Protocol Negotiation) is available. That means ALPN is supported on:

All in all, it's a solid release. Go check out the announcement post on ASP.NET Core 2.2 for even more detail!


Sponsor: Preview the latest JetBrains Rider with its Assembly Explorer, Git Submodules, SQL language injections, integrated performance profiler and more advanced Unity support.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb
Sunday, 16 December 2018 11:16:24 UTC
This is awesome... seamless upgrade is a plus... will definitely upgrade once released... the only downside is it requires Visual Studio to be upgraded as well... that means the entire team members have to upgrade their IDE.
rosdi
Monday, 17 December 2018 07:54:42 UTC
Great post, for Http/2 did you have to add a certificate? After looking at various examples it seems you need a .pfx for this to work in kestrel? When I create a new MVC application using the visual studio templates, Http/2 isn't on by default. Am I missing something?
DotnetShadow
Monday, 17 December 2018 08:00:09 UTC
Can you do an article on any performance improvements to full fat .NET framework, or is MS just giving up on that for the web side of things now .NET Core is out?
Peter
Monday, 17 December 2018 10:37:22 UTC
You did a great job with Microsoft Connect demo. Please share your theme for vscode I wanted to have it. It's really looking cool.
Monday, 17 December 2018 14:22:24 UTC
Scott,

What's your thoughts on using ASP.Net Core for intranet apps? We develop about a dozen apps here for intranet use only. Part of me would like to use Docker and Core... but we are a Windows only environment, with Windows servers.
Eric Burdo
Monday, 17 December 2018 16:12:43 UTC
I've had some issues with an we developed initially on .NET Core 2.0 and actually haven't got around to upgrading to 2.1 yet. Guess I'll skip to 2.2 when I get the "go ahead". I wonder how much of our particular issue will be remedied or sidestepped by the IIS in-proc?

The skinny of it is that certain operations are fairly intensive so we can only support a certain number of concurrent calls and queue size before the site gets too bogged down (think the first few hours of any Steam sale). Anything we tried on the IIS side to munge with the queue and throttling requests didn't seem to be applicable (likely due to IIS 7 and integrated mode changes) but aside from the Kestrel limits themselves we couldn't figure out how to actually set up a queue. It was either "we can handle 'x' calls or we'll 503 ya!"

For better or worse we ended up implementing Tomasz Pęczek's "experimental" throttler on top of making some other changes to our overall pipeline (more/better async/await handling, caching some of the heavy calls, etc) and that at least got us to a stable spot.

Anyway, looking forward to trying it out and now that we're out of the fire I can spend some time researching the IIS to .NET Core proxy and see if I can figure the queue/throttling stuff out directly instead of using the bandaid.
Tuesday, 18 December 2018 08:39:34 UTC
Guess I'll skip to 2.2 when I get the "go ahead". I wonder how much of our particular issue will be remedied or sidestepped by the IIS in-proc? The skinny of it is that certain operations are fairly intensive so we can only support a certain number of concurrent calls and queue size before the site gets too bogged down (think the first few hours of any Steam sale). Anything we tried on the IIS side to munge with the queue and throttling requests didn't seem to be applicable (likely due to IIS 7 and integrated mode changes) but aside from the Kestrel limits themselves we couldn't figure out how to actually set up a queue.
Justin Jack
Friday, 21 December 2018 19:13:35 UTC
That's the "Andromeda" theme, Jalpesh!
Scott Hanselman
Saturday, 22 December 2018 02:34:07 UTC
Does Kestral exist? :-p

I think you meant Kestrel. Anyway, I'm looking at these new feature from 2.2 right now.
Adan Jauregui
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.