Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove stateful prerendering #12245

Closed
rynowak opened this issue Jul 16, 2019 · 14 comments

Comments

@rynowak
Copy link
Member

commented Jul 16, 2019

Summary

Blazor has a feature that I'll refer to as stateful-prerendering where you render a group of components on the server, and then retain that group of components in memory until the client opens a SignalR connection (or it times out).

This currently has some really bad scalability problems, and we think it's not viable for use in production with the current implementation.

However, this is a nicer developer experience than some of the alternatives because a variety of different scenarios just work.

I'm sure that if we had lots of time we could provide a set of complicated knobs and dials that developers could use to try and make this feature viable for their use case and risks, we're out of time to do so. The extra things that stateful-prerendering enables are not on the main path for server-side Blazor, and so it should be cut entirely.

Proposed Template Changes

These changes should take place in Preview 8 so that we can gather feedback

We'll use a different technique to wire up the entry point component in the template.

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapBlazorHub<App>(selector: "app");
                endpoints.MapFallbackToPage("/_Host");
            });

We'll still use prerendering in the template, but we'll call out how to remove it.

    <app>
        @* Remove the following line of code to disable prerendering *@
        @(await Html.RenderStaticComponentAsync<App>())
    </app>

See notes below about RenderStaticComponentAsync

Proposed Product Changes

These changes can take place as late as Preview 9 - but earlier is always better

We should remove the functionality for stateful-prerendering from the server. We're not recommending it for use in any production scenario, and so we should remove the functionality.

The Microsoft.AspNetCore.Mvc.Components.Prerendering package can be removed.

The RenderStaticComponentAsync methods should be renamed to RenderComponentAsync.

Various implementation pieces can be cleaned up as-desired. We can't predict right now if we'll bring back the same feature in the same way, so the cleanest thing to do would be to remove all of the unneeded functionality.

@rynowak rynowak added the area-blazor label Jul 16, 2019

@rynowak rynowak added this to Triage in Blazor via automation Jul 16, 2019

@SteveSandersonMS

This comment has been minimized.

Copy link
Member

commented Jul 17, 2019

Note that as a prerequisite to making these changes, we also have to fix #11799, otherwise the template will be broken by default.

@javiercn

This comment has been minimized.

Copy link
Member

commented Jul 17, 2019

Can we put the appropriate supporting data that showcases the concerns we have in this issue for future reference in case we want to bring the feature back at a later point?

@rynowak

This comment has been minimized.

Copy link
Member Author

commented Jul 17, 2019

Sure - @pranavkm

@chrdlx

This comment has been minimized.

Copy link

commented Jul 18, 2019

Will this affect the way we embed blazor components in MVC/Razor Pages?
I'm building an enterprise web portal with razor pages, and for the interactive parts I went for blazor components embedded in them , will I be in trouble with this change?

Regards

@rynowak

This comment has been minimized.

Copy link
Member Author

commented Jul 18, 2019

Will this affect the way we embed blazor components in MVC/Razor Pages?

Yes, it won't be possible to pass parameters into the top level component and have it retain state. So you can definitely host interactive widgets on pages - but it won't be straightforward to pass data in.

@chrdlx

This comment has been minimized.

Copy link

commented Jul 18, 2019

Will this affect the way we embed blazor components in MVC/Razor Pages?

Yes, it won't be possible to pass parameters into the top level component and have it retain state. So you can definitely host interactive widgets on pages - but it won't be straightforward to pass data in.

Oh ok, so if I understood correctly, from the docs:

https://docs.microsoft.com/en-us/aspnet/core/blazor/components?view=aspnetcore-3.0#integrate-components-into-razor-pages-and-mvc-apps

@(await Html.RenderComponentAsync<Counter>(new { IncrementAmount = 10 }))

This won't be possible anymore and there will be another way to pass that parameter to the components?

Also, is fine to answer this kind of questions here or am I polluting the thread?
Regards

@rynowak

This comment has been minimized.

Copy link
Member Author

commented Jul 18, 2019

@(await Html.RenderComponentAsync<Counter>(new { IncrementAmount = 10 }))

Right. This is what I'm saying will be removed. We haven't created another way to pass parameters into components for 3.0.

The problem is that this relies on creating the Counter component while the request is happening, and keeping it around in memory until some time in the future when the browser connects back.

We've been doing measurements of this and it's going to be really hard to run in production without problems - if you have untrusted clients, they can force the server to do a lot of work or keep a lot of things in memory.

Also, is fine to answer this kind of questions here or am I polluting the thread?

Perfectly fine. If you want to give us some examples of things you're trying to do we can try to provide more information or ideas.

@pranavkm

This comment has been minimized.

Copy link
Member

commented Jul 18, 2019

Here are my notes from when I ran this on the Benchmark server:


  1. I was using our default template as the application + preview7 bits
  2. Clients attempt to DOS by attempting the exhaust the disconnected circuit buffer. To do this, they do a HTTP GET on the home page. This triggers our pre-rendering
  3. I used the benchmarking infrastructure. It has workers that support performing a constant RPS over vanilla HTTP
  4. I used a browser to verify that the app was still functional while being DOSed. It’s not a very scientific way to test, but it was good enough for our needs.

With the size limit that we have by default, the site’s immediately unusable. Reconnects consistenty fail and the build logs filled with stuff like this:

[40m[37mdbug[39m[22m[49m: Microsoft.AspNetCore.Components.Server.Circuits.CircuitRegistry[111]
      Circuit with id CfDJ8F_JmI3ECwpDqUv08g88IdLWucBmdKhe4nUGPqlyXvASEQXyuTM_3KU27VBAdLIwiOGULRO-2asWRPzFvdQDGDU8D-JRj1i7ikj-BPbEXGHhTN0F4v4r2UGctcdkF5QHm0rWiZ4HIT5TMua-i1P7TzC4rZ3ssA9RhTkN4IVGkvm4 evicted due to Capacity.
[40m[37mdbug[39m[22m[49m: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[105]
      Closing circuit with id CfDJ8F_JmI3ECwpDqUv08g88IdKW7WSP3Vj9OyXXP0HJctvy2guLEn3bhnFBVIngaxnPtLHA4MKF8SjG1rLnNL7bUCDsP-eaeoVg-8tRrqoh4Ng1s8DD1O-rEhdvcXwCHUTMqI3mI_oyiBlWA5W0TQrB8ZUCEhcWn3yBaAklWdsab5zy.

Ryan suggested removing the size limit entirely (set to int32.MaxValue) and that does make the application way more usable. I played around with different timeouts and RPS values to see what the app looks like.

Here’s one set of data points:

500	30	RequestsPerSecond:           852
Max CPU (%):                 21
WorkingSet (MB):             471
Avg. Latency (ms):           6.42
1500	30	RequestsPerSecond:           14,296
Max CPU (%):                 76
WorkingSet (MB):             3,975
Avg. Latency (ms):           21.13
3500	30	RequestsPerSecond:           7,961
Max CPU (%):                 99
WorkingSet (MB):             4,624
Avg. Latency (ms):           116.42

Approaching higher RPS, the working set tends to be really large. To test that this is primarily coming from pre-rendering, I tried out what it looked like with static pre-rendering:

500	RequestsPerSecond:           902
Max CPU (%):                 17
WorkingSet (MB):             182
Avg. Latency (ms):           6.73
1500	RequestsPerSecond:           2,995
Max CPU (%):                 65
WorkingSet (MB):             193
Avg. Latency (ms):           7.27
3500	RequestsPerSecond:           7,744
Max CPU (%):                 101
WorkingSet (MB):             187
Avg. Latency (ms):           96.89

Effectively for a small amount of work that the client performed (make a HTTP GET request) the server would allocate a ton of memory waiting for the client to reconnect. By spamming the server with GETs you could effectively DOS the server or require that the server preserve a really large amount of state to guarantee the reconnect succeeds.

@javiercn

This comment has been minimized.

Copy link
Member

commented Jul 18, 2019

A couple of thoughts for the future I guess.

  • Does the memory goes back down once you stop sending data to the client?
  • If we were to avoid having a limit on prerendered circuits (we special case them, by putting them on a special queue and getting rid of them after lets say 5-10 seconds after we start sending the response to the client).
    • Does the memory growth slow down significantly?
    • Does the memory growth go back to normal after the 5 to 10 seconds? (Meaning we don't hold on to any reference after that).

While the memory grows here by a lot, I think the scenario is similar to a client dispatching events at a high rate, in the sense that the memory grows and then goes back down after there is no more work happening.

One thing we could consider is to have the feature not be on by default and provide good documentation about its usage. There are environments where this feature is very valuable and this threat (if anything) is not a problem, like intranet applications.

@jzabroski

This comment has been minimized.

Copy link

commented Jul 18, 2019

While the memory grows here by a lot, I think the scenario is similar to a client dispatching events at a high rate, in the sense that the memory grows and then goes back down after there is no more work happening.

Interesting. That is what Streambase does: they kick out of the queue all the clients that are too slow to connect to the CEP stream and consume the events. Their "queue" is actually LMAX Disruptor design pattern. Performance is then relative to fitting the ring buffer in the L1 cache. If the ring buffer cannot fit in the L1 cache, then it becomes a bit like having an empty beer fridge in the living room, and having to go to the kitchen for refreshment during the Big Game.

Is LMAX Disruptor a usable design pattern for mainstream programmers, though?

@mkArtakMSFT mkArtakMSFT self-assigned this Jul 18, 2019

mkArtakMSFT pushed a commit that referenced this issue Jul 18, 2019
Artak Mkrtchyan
mkArtakMSFT added a commit that referenced this issue Jul 19, 2019

@mkArtakMSFT mkArtakMSFT removed their assignment Jul 19, 2019

@rynowak rynowak self-assigned this Jul 20, 2019

@mkArtakMSFT mkArtakMSFT moved this from Triage to Preview9 in Blazor Jul 22, 2019

baulig added a commit to baulig/AspNetCore that referenced this issue Jul 22, 2019
Squashed commit of the following:
commit 2e0d7889adf83c4360b793fbd8ba7ca86d407816
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Mon Jul 22 20:57:52 2019 +0100

    Kestrel code tidyups (#11896)

commit 7ca234607a37c9e7db06013a21208769e3eeb0a2
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Mon Jul 22 10:21:50 2019 -0700

    [master] Update dependencies from dotnet/arcade aspnet/Blazor (#12436)

    * Update dependencies from https://github.com/dotnet/arcade build 20190719.2
    - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19369.2
    - Microsoft.DotNet.GenAPI - 1.0.0-beta.19369.2
    - Microsoft.DotNet.Helix.Sdk - 2.0.0-beta.19369.2

    * Update dependencies from https://github.com/aspnet/Blazor build 20190722.1
    - Microsoft.AspNetCore.Blazor.Mono - 0.10.0-preview8.19372.1

commit c918d72f3669e5e375776ea17b8866132c3350b3
Author: Javier Calvarro Nelson <jacalvar@microsoft.com>
Date:   Mon Jul 22 19:14:30 2019 +0200

    [Blazor] [Fixes #11847] Renderer.DispatchEventAsync throws null reference exception if event handler throws synchronously (#12393)

    [Blazor] [Fixes #11847] Renderer.DispatchEventAsync throws null
    reference exception if event handler throws synchronously
    * Returns after handling the exception.
    * Adds a unit test and an E2E test to validate expected behavior.

commit d846cb4b97007ef3212777909b8ea998c65c80a7
Author: Javier Calvarro Nelson <jacalvar@microsoft.com>
Date:   Mon Jul 22 19:10:45 2019 +0200

    [Blazor] Update typescript dependencies (#12395)

    * [Blazor] Update npm dependencies to fix security vulnerabilities
    * Update to latest typescript compiler

commit a99ab25700e6c8a58ca75ee59621b8b671431706
Author: Pranav K <prkrishn@hotmail.com>
Date:   Mon Jul 22 09:40:04 2019 -0700

    Add converters for ProblemDetails and ValidationProblemDetails (#12216)

    * Add converters for ProblemDetails and ValidationProblemDetails

    ProblemDetails & ValidationProblemDetails require IgnoreNullValues to be
    applied on the types. We'll use a converter to workaround the absence of this
    feature

    Fixes https://github.com/aspnet/AspNetCore/issues/11522

commit f8c22859a0b8524b78f53888bcc5e74e95520dcb
Author: David Fowler <davidfowl@gmail.com>
Date:   Mon Jul 22 09:23:22 2019 -0700

    Complete the reader in Dispose (#12430)

    - This should avoid issues about completing while still reading.
    - Dispose the HttpResponseMessage in some tests that use ResponseHeadersRead);

commit 077df0e3ca6849df8173ca818693dbf1d99fa512
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Mon Jul 22 08:14:10 2019 -0700

    Support more types of redirection during prerendering. Fixes #11591 (#12418)

    * E2E test to show current behavior

    * Actually support base-relative, root-relative, and absolute redirections during prerendering

    * Fix MVC functional test

commit 178374d228c3d0e4aa0ec5b2bedbf730121895af
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Mon Jul 22 07:52:20 2019 -0700

    Make reconnection work more realistically (#12420)

    * Support reconnection even if an earlier attempt failed

    * Add "reload" button to reconnect dialog on failure

    * Update blazor.*.js

commit 330a7708c098d356b8cf59855317915c9270d997
Author: Artak Mkrtchyan <artakm@corp.microsoft.com>
Date:   Mon Jul 22 06:59:25 2019 -0700

    Dependency updates

commit 9851e0168812471e52c4c965a0c0005240f762ba
Author: David Fowler <davidfowl@gmail.com>
Date:   Sun Jul 21 21:14:03 2019 -0700

    Track connection earlier (#12387)

    - We made a change to dispatch connection execution but that also ended up dispatching the tracking of those connections in the connection manager. While it's not a huge deal most of the time it can affect graceful shutdown as there can be queued connections that are delayed in the thread pool queue which are untracked. This change makes it so we track the KestrelConnection before dispatching.

commit e69328b3d0bee7fd1777226d16e4d8f550acce75
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Mon Jul 22 03:21:06 2019 +0000

    Update dependencies from https://github.com/aspnet/Blazor build 20190721.1 (#12424)

    - Microsoft.AspNetCore.Blazor.Mono - 0.10.0-preview8.19371.1

commit 2c3a44371a651e31d10ed1969b1f0a86335214ee
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Sun Jul 21 20:00:03 2019 -0700

    Clear unused routing params. Fixes #7419 (#12407)

commit 6a24db55433402d693d26cc764c704e0d7ac9593
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Sun Jul 21 18:26:42 2019 -0700

    [master] Update dependencies from 3 repositories (#12390)

    * Update dependencies from https://github.com/dotnet/roslyn build 20190720.1
    - Microsoft.Net.Compilers.Toolset - 3.3.0-beta2-19370-01

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190720.2
    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19370.2
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19370.2
    - dotnet-ef - 3.0.0-preview8.19370.2
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19370.2
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19370.2
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19370.2
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19370.2

    Dependency coherency updates
    - Microsoft.AspNetCore.Analyzer.Testing - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.BenchmarkRunner.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ActivatorUtilities.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Memory - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.SqlServer - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.StackExchangeRedis - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.CommandLineUtils.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.AzureKeyVault - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Binder - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.CommandLine - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.EnvironmentVariables - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.FileExtensions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Ini - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Json - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.KeyPerFile - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.UserSecrets - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Xml - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DiagnosticAdapter - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Composite - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Embedded - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Physical - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileSystemGlobbing - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HashCodeCombiner.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HostFactoryResolver.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Http - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Abstractions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.AzureAppServices - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Configuration - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Console - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Debug - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventSource - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventLog - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.TraceSource - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Testing - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ObjectPool - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.ConfigurationExtensions - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.DataAnnotations - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ParameterDefaultValue.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Primitives - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.TypeNameHelper.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ValueStopwatch.Sources - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.WebEncoders - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Internal.Extensions.Refs - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.JSInterop - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Mono.WebAssembly.Interop - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Internal.AspNetCore.Analyzers - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.Testing - 3.0.0-preview8.19370.1 (parent: Microsoft.EntityFrameworkCore)

    * Update dependencies from https://github.com/aspnet/AspNetCore-Tooling build 20190720.2
    - Microsoft.NET.Sdk.Razor - 3.0.0-preview8.19370.2
    - Microsoft.CodeAnalysis.Razor - 3.0.0-preview8.19370.2
    - Microsoft.AspNetCore.Razor.Language - 3.0.0-preview8.19370.2
    - Microsoft.AspNetCore.Mvc.Razor.Extensions - 3.0.0-preview8.19370.2

commit 22fbeac33605dbfa951b5d8b5cfa283a336f6a7d
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Sun Jul 21 17:22:26 2019 -0700

    Clarify IUriHelper GetAbsoluteUrl behavior. Fixes #9717 (#12422)

    * E2E test showing it already works when navigating inside the app

    * E2E test showing expected behavior around both sides of prerendering

commit e043f9317ff482729ed81d1438e1a2a766d43806
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Sun Jul 21 17:20:46 2019 -0700

    Make server-side Blazor template logout use POST. Fixes #11981 (#12419)

commit 36a651e29aa76ed285c7beda4a029ec005af036a
Author: Pranav K <prkrishn@hotmail.com>
Date:   Sun Jul 21 16:39:45 2019 -0700

    Support fewer data types in BlazorPackHubProtocol (#11662)

    These are data types not used \ required by Blazor.

commit 6421c41d30f311f7e8ab66ff32850676d9735958
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Thu Jul 18 20:55:12 2019 -0700

    Update refs

commit f00a6e9c50232e27fbe03c4c5b4ab46121cf891d
Author: Ryan Nowak <nowakra@gmail.com>
Date:   Thu Jul 18 18:26:15 2019 -0700

    Move UIEventArgs types

commit 53c76c70fe8f948f8adcf9042829c622cbda2e0f
Author: Ryan Nowak <nowakra@gmail.com>
Date:   Thu Jul 18 17:42:26 2019 -0700

    Move NavLink to Web

    Also undid the use of ref assemblies in our tests. This is kinda wierd
    and breaks dev inner-loop.

commit 2aa9933e5437ecac13e71944e07f62af1931c037
Author: Ryan Nowak <nowakra@gmail.com>
Date:   Thu Jul 18 17:13:33 2019 -0700

    Move Forms to Web

commit ac7f30e63bb215041e95f0257277fc9efd9758b8
Author: David Fowler <davidfowl@gmail.com>
Date:   Sun Jul 21 00:27:58 2019 -0700

    Small cleanup to HttpConnection (#12346)

    - Remove code that detects the Initializing state. We're already selected before any of those callbacks can run.
    - Added asserts

commit 09dfe83aa9396fe452cf2fc9e5a7e6861a7e29f4
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sun Jul 21 01:37:58 2019 +0100

    Remove infinite loop from Email.cshtml.cs (#12400)

commit 65ca72c4206cd73a14b3c202713ce700139896d8
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Sat Jul 20 21:07:20 2019 +0100

    Better context pooling (#12385)

    - This change goes from pooling just the HttpContext to pooling the entire TContext. In the past this was a huge struct that got copied around and now it can be a class. Servers can provide the storage for the TContext via a new `IHostContextContainer<TContext>` interface.
    - Removed IDefaultHttpContextContainer since it's been superseded by IHostContextContainer
    - Move DefaultHttpContextFactory to Hosting to take advantage of internal methods
    - Also handle a null FeatureCollection and null HttpContext and throw a better exception

commit 4ac6a4ad35801001d6b971c06254bd3da078741c
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 12:51:54 2019 -0700

    Fix second part of #12286

    We used to be inconsistent between what we'd do when formatting a value
    based on whether or not you specified a format.

    This change brings us back into consistency.

    For a `default` DateTime/DateTimeOffset we will just call ToString on
    it. For a `default` nullable of these types we will return the empty
    string.

commit 3e10688d125dd40b8ff9ecec7f14edc92154081e
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 12:33:08 2019 -0700

    Attempt to fix bind tests for non-en-US

    While it's definitly intended for `@bind` to have culture-sensitive
    output for most cases, we want the tests to behave consistently for all
    developers.

    So this is an attempt to use a fixed culture for all of our testing.

commit d96f444a6b2cecfaa49eeb6df75546e84b3eb03c
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 12:32:55 2019 -0700

    Add support for type="number" and type="date"

commit af7ac7ff2939343bca551a4eb955d4b96c63c93f
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 11:24:36 2019 -0700

    Add ability to specify culture and format

    This lets us specify the associations between the HTML5 field types and
    these settings.

commit 3aeee008990f56b391489691db8d280673230c18
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 11:14:38 2019 -0700

    Unskip weakly-typed component bind tests

commit 3f02894057ef9f3d42b9ea3b9f61f6639499105b
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 11:08:19 2019 -0700

    Add workaround for current tooling

    We don't want to put this in one of the product assemblies because that
    would undo the API review xD

commit 7bf660947baf8966cd65ae6a3708cf283576dc25
Author: Javier Calvarro Nelson <jacalvar@microsoft.com>
Date:   Sat Jul 20 13:06:53 2019 +0200

    [ApiAuth] Switches back to use code+PKCE (#12375)

    * Move SPA flows to use code + pkce
    * Updates OIDC dependency to 1.9-beta1

commit d8911c1c74f09dd74ede59dfa3fcc4a61ef5987d
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Sat Jul 20 09:33:35 2019 +0000

    [master] Update dependencies from 2 repositories (#12384)

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.3

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.3
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.3
    - dotnet-ef - 3.0.0-preview8.19369.3
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.3
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.3
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.3
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.3

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.4

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.4
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.4
    - dotnet-ef - 3.0.0-preview8.19369.4
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.4
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.4
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.4
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.4

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.5

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.5
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.5
    - dotnet-ef - 3.0.0-preview8.19369.5
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.5
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.5
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.5
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.5

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.6

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.6
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.6
    - dotnet-ef - 3.0.0-preview8.19369.6
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.6
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.6
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.6
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.6

    * Dependency coherency updates

    - Microsoft.AspNetCore.Analyzer.Testing - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.BenchmarkRunner.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ActivatorUtilities.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Memory - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.SqlServer - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.StackExchangeRedis - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.CommandLineUtils.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.AzureKeyVault - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Binder - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.CommandLine - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.EnvironmentVariables - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.FileExtensions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Ini - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Json - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.KeyPerFile - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.UserSecrets - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Xml - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DiagnosticAdapter - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Composite - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Embedded - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Physical - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileSystemGlobbing - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HashCodeCombiner.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HostFactoryResolver.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Http - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Abstractions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.AzureAppServices - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Configuration - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Console - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Debug - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventSource - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventLog - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.TraceSource - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Testing - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ObjectPool - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.ConfigurationExtensions - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.DataAnnotations - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ParameterDefaultValue.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Primitives - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.TypeNameHelper.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ValueStopwatch.Sources - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.WebEncoders - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Internal.Extensions.Refs - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.JSInterop - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Mono.WebAssembly.Interop - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Internal.AspNetCore.Analyzers - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.Testing - 3.0.0-preview8.19369.3 (parent: Microsoft.EntityFrameworkCore)

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.7

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.7
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.7
    - dotnet-ef - 3.0.0-preview8.19369.7
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.7
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.7
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.7
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.7

    * Update dependencies from https://github.com/aspnet/AspNetCore-Tooling build 20190719.2

    - Microsoft.NET.Sdk.Razor - 3.0.0-preview8.19369.2
    - Microsoft.CodeAnalysis.Razor - 3.0.0-preview8.19369.2
    - Microsoft.AspNetCore.Razor.Language - 3.0.0-preview8.19369.2
    - Microsoft.AspNetCore.Mvc.Razor.Extensions - 3.0.0-preview8.19369.2

    * Dependency coherency updates

    - Microsoft.AspNetCore.Analyzer.Testing - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.BenchmarkRunner.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ActivatorUtilities.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Memory - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.SqlServer - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.StackExchangeRedis - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.CommandLineUtils.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.AzureKeyVault - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Binder - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.CommandLine - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.EnvironmentVariables - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.FileExtensions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Ini - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Json - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.KeyPerFile - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.UserSecrets - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Xml - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DiagnosticAdapter - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Composite - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Embedded - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Physical - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileSystemGlobbing - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HashCodeCombiner.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HostFactoryResolver.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Http - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Abstractions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.AzureAppServices - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Configuration - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Console - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Debug - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventSource - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventLog - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.TraceSource - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Testing - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ObjectPool - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.ConfigurationExtensions - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.DataAnnotations - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ParameterDefaultValue.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Primitives - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.TypeNameHelper.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ValueStopwatch.Sources - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.WebEncoders - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Internal.Extensions.Refs - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.JSInterop - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Mono.WebAssembly.Interop - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Bcl.AsyncInterfaces - 1.0.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.CSharp - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Win32.Registry - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Win32.SystemEvents - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.ComponentModel.Annotations - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Diagnostics.EventLog - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Drawing.Common - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.IO.Pipelines - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Net.Http.WinHttpHandler - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Net.WebSockets.WebSocketProtocol - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Reflection.Metadata - 1.7.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Runtime.CompilerServices.Unsafe - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Security.Cryptography.Cng - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Security.Cryptography.Pkcs - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Security.Cryptography.Xml - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Security.Permissions - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Security.Principal.Windows - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.ServiceProcess.ServiceController - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Text.Encodings.Web - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Text.Json - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Threading.Channels - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - System.Windows.Extensions - 4.6.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyModel - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Ref - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - NETStandard.Library.Ref - 2.1.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.Platforms - 3.0.0-preview8.19369.5 (parent: Microsoft.NETCore.App.Runtime.win-x64)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-09 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Internal.AspNetCore.Analyzers - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.Testing - 3.0.0-preview8.19369.4 (parent: Microsoft.EntityFrameworkCore)

    * Update dependencies from https://github.com/aspnet/AspNetCore-Tooling build 20190719.3

    - Microsoft.NET.Sdk.Razor - 3.0.0-preview8.19369.3
    - Microsoft.CodeAnalysis.Razor - 3.0.0-preview8.19369.3
    - Microsoft.AspNetCore.Razor.Language - 3.0.0-preview8.19369.3
    - Microsoft.AspNetCore.Mvc.Razor.Extensions - 3.0.0-preview8.19369.3

commit 3a590b432401473b91bb0ec05f64e6f939654b69
Author: Ryan Brandenburg <rybrande@microsoft.com>
Date:   Sat Jul 20 00:21:02 2019 -0700

    Endpoint routing in SPA templates (#11621)

    * Endpoint routing in SPA templates

    * Revert "More doc comment additions"

    This reverts commit ef2c042ec73f221a07d369e0c5f9ddd22298a632.

    * PR feedback

    * PR feedback

    * Don't make the same mistake twice

    * Resolve rebase problems

    * Remove missing variable

    * MapRazorPages

    * Conditionalize

    * Use variables that exist

    * Fix variable names

commit a3b5434b8b44986e2df28fd2e0e8fad38f7fa4cb
Author: Artak <34246760+mkArtakMSFT@users.noreply.github.com>
Date:   Fri Jul 19 21:28:46 2019 -0700

    Added Angular 8 license info (#12367)

    Addresses #10840

commit 789b8f1366c54638c53f5c162361a0e340836774
Author: Artak <34246760+mkArtakMSFT@users.noreply.github.com>
Date:   Fri Jul 19 21:28:18 2019 -0700

    Updated the ThirdPartyNotices link (#12382)

    * Updated the ThirdPartyNotices link for 3.0

commit fcb6575f199f78688acb029f55847eca4e4ca0a1
Author: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Date:   Fri Jul 19 19:14:30 2019 -0700

    Address immediate issues in service reference feature (#12366)

    - #12363
    - correct a few VS issues
    - void silent failures
    - improve documentation
    - support the `clean` target
    - stop using experimentatal package version

commit 470bfddf92ebcdb1ac8cdc0422446c0d4524f87d
Author: Javier Calvarro Nelson <jacalvar@microsoft.com>
Date:   Sat Jul 20 02:16:32 2019 +0200

    [Blazor][Fixes #8003] Improves reconnects when the client doesn't perform graceful disconnects (#12327)

    * Allows the server to accept acks with a higher sequence number than the first queued pending render and caches up to it.
    * Makes the client send acks for previous render batches.
    * Makes the client repeat acks for errored render batches if it keeps receiving new render batches.
    * Client awaits sending acks to ensure that they get send in order.

commit 3b6216c113df37517c8d3e6e586dd88142eb866a
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Fri Jul 19 23:39:05 2019 +0000

    [master] Update dependencies from 2 repositories (#12362)

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.2

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.2
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.2
    - dotnet-ef - 3.0.0-preview8.19369.2
    - Microsoft.EntityFrameworkCore - 3.0.0-preview8.19369.2
    - Microsoft.EntityFrameworkCore.InMemory - 3.0.0-preview8.19369.2
    - Microsoft.EntityFrameworkCore.Relational - 3.0.0-preview8.19369.2
    - Microsoft.EntityFrameworkCore.Sqlite - 3.0.0-preview8.19369.2

    Dependency coherency updates

    - Microsoft.AspNetCore.Analyzer.Testing - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.BenchmarkRunner.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ActivatorUtilities.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.Memory - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.SqlServer - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Caching.StackExchangeRedis - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.CommandLineUtils.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.AzureKeyVault - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Binder - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.CommandLine - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.EnvironmentVariables - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.FileExtensions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Ini - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Json - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.KeyPerFile - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.UserSecrets - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration.Xml - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Configuration - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyInjection - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DiagnosticAdapter - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Diagnostics.HealthChecks - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Composite - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Embedded - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileProviders.Physical - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.FileSystemGlobbing - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HashCodeCombiner.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Hosting - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.HostFactoryResolver.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Http - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Localization - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Abstractions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.AzureAppServices - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Configuration - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Console - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Debug - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventSource - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.EventLog - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.TraceSource - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Logging.Testing - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ObjectPool - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.ConfigurationExtensions - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options.DataAnnotations - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Options - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ParameterDefaultValue.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.Primitives - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.TypeNameHelper.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.ValueStopwatch.Sources - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.WebEncoders - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Internal.Extensions.Refs - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.JSInterop - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Mono.WebAssembly.Interop - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.Extensions.DependencyModel - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Ref - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - NETStandard.Library.Ref - 2.1.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.NETCore.App.Runtime.win-x64 - 3.0.0-preview8-27919-01 (parent: Microsoft.Extensions.Logging)
    - Microsoft.Extensions.Logging - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Internal.AspNetCore.Analyzers - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)
    - Microsoft.AspNetCore.Testing - 3.0.0-preview8.19369.1 (parent: Microsoft.EntityFrameworkCore)

    * Update dependencies from https://github.com/aspnet/AspNetCore-Tooling build 20190719.1

    - Microsoft.NET.Sdk.Razor - 3.0.0-preview8.19369.1
    - Microsoft.CodeAnalysis.Razor - 3.0.0-preview8.19369.1
    - Microsoft.AspNetCore.Razor.Language - 3.0.0-preview8.19369.1
    - Microsoft.AspNetCore.Mvc.Razor.Extensions - 3.0.0-preview8.19369.1

commit 79283cf2de862f3214524becabcbc30180848c62
Author: Hao Kung <HaoK@users.noreply.github.com>
Date:   Fri Jul 19 16:23:43 2019 -0700

    Identity UI fixes (#11768)

commit 775314b142265787875269634ad56f4827992d58
Author: Hao Kung <HaoK@users.noreply.github.com>
Date:   Fri Jul 19 16:13:00 2019 -0700

    Update identity migrations to 3.0.0 (#12258)

commit 533ed4240c6d3815116ec05470f3e47ecf72d8d5
Author: Pranav K <prkrishn@hotmail.com>
Date:   Fri Jul 19 16:01:53 2019 -0700

    Code review feedback for transcoding Streams (#12142)

commit d992a1e2efe9d7a1e06972dd75cc70815bb55b14
Author: Ryan Nowak <rynowak@microsoft.com>
Date:   Fri Jul 19 10:44:05 2019 -0700

    Blazor API Review: Server-side startup code

    Fixes: #12220

    Just some small tweaks here, it's already great.

commit e69d378442394e57edcfb443c397c634d6ac7946
Author: Ryan Brandenburg <rybrande@microsoft.com>
Date:   Fri Jul 19 13:38:29 2019 -0700

    RazorClassLibrary Components (#12134)

    RazorLibrary components

commit 5a0a7aa08803caf78361e27411e3bc6046ec29c4
Author: Ben Adams <thundercat@illyriad.co.uk>
Date:   Fri Jul 19 21:34:19 2019 +0100

    Capture Edi at Abort not throw (#11875)

commit e6a4d9f19ef90359b9505fb11eec712b4e28ffa2
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Fri Jul 19 18:54:02 2019 +0100

    Update reconnection E2E tests

commit a77738e52fd078d8eca452a700403ce650876466
Author: Pranav K <prkrishn@hotmail.com>
Date:   Fri Jul 19 13:15:02 2019 -0700

    Combine attributes specified on Page and PageModel (#12332)

    Fixes https://github.com/aspnet/AspNetCore/issues/11296

commit b23ea5b6683b08e8d168ccf49e0fc8515077ee2e
Author: Ryan Nowak <nowakra@gmail.com>
Date:   Thu Jul 18 13:22:54 2019 -0700

    Improvements to MVC EventData typess

    Improvments to names
    - Using EventData suffix
    - More clarity for events assocated with filters

    Fixes: #12263

    We have to report the BeforeActionMethod using its old signature because
    it's used by Intellitrace. I added a new pair of events with a better
    name to use with strong types since there's no practical way to update
    the old ones.

commit 39c3ca2d9f2fe6099ef3b107773249f6299ac923
Author: Artak <34246760+mkArtakMSFT@users.noreply.github.com>
Date:   Fri Jul 19 12:35:39 2019 -0700

    Updated the template per #12245 (#12325)

commit 7b65a32b8b8d28bc1addfdc615c9fb00a0cd6457
Author: Brennan <brecon@microsoft.com>
Date:   Fri Jul 19 12:33:38 2019 -0700

    Fix flaky test (#12365)

commit 1950e597145c2c62c6df8571a4c7a79804c516e6
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Fri Jul 19 19:26:33 2019 +0100

    Make static prerendering support auth. Fixes #11799 (#12318)

    * Make E2E prerendering test use static prerendering (we no longer need coverage for stateful prerendering)

    * Use authentication state during static prerendering. This replicates issue #11799 in the E2E test

    * Initialize the authentication state provider during static prerendering

    * Update ref assembly

    * Update unit test

commit c25a0d1bf5b6d96d0a9674a3335ea5597402a85c
Author: Marcel <marcelcroes24@gmail.com>
Date:   Fri Jul 19 19:25:54 2019 +0200

    Grammer in comments (#12355)

commit e451597a0aaa7c0dedd9bb584851a99429d0715c
Author: Steve Sanderson <SteveSandersonMS@users.noreply.github.com>
Date:   Fri Jul 19 18:23:41 2019 +0100

    API review: Web.JS. Fixes #12229 (#12361)

    * Some initial tidying on Boot.Server.ts, though can't make much difference until stateful prerendering is removed

    * In Web.JS, rename ILogger to Logger to match TypeScript conventions

    * Move reconnection options into BlazorOptions

    * In Web.JS, eliminate collection of CircuitHandlers and just have one ReconnectionHandler

    * Expose Blazor.defaultReconnectionHandler

    * Update binaries

commit e808a4f2edbcaa7f95e393e8cbaadffa9dc2f9da
Author: Brennan <brecon@microsoft.com>
Date:   Fri Jul 19 10:07:56 2019 -0700

    Set display unit for event counter (#12331)

commit 54e190680584e2e0b0161a9ba5f3a2ba4e159587
Author: Artak <34246760+mkArtakMSFT@users.noreply.github.com>
Date:   Fri Jul 19 09:59:39 2019 -0700

    Added Angular v8 license notice (#12359)

commit 447205ce59212b2e0d1c99ba04356ffcbac4ddfd
Author: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Date:   Fri Jul 19 15:35:49 2019 +0000

    [master] Update dependencies from dotnet/roslyn aspnet/EntityFrameworkCore (#12353)

    * Update dependencies from https://github.com/dotnet/roslyn build 20190719.1

    - Microsoft.Net.Compilers.Toolset - 3.3.0-beta2-19369-01

    * Update dependencies from https://github.com/aspnet/EntityFrameworkCore build 20190719.1

    - Microsoft.EntityFrameworkCore.Tools - 3.0.0-preview8.19369.1
    - Microsoft.EntityFrameworkCore.SqlServer - 3.0.0-preview8.19369.1
    - dotnet-ef - 3.0.0-preview8.19369.1
    - Microsoft.EntityFrameworkC…

@rynowak rynowak added the Working label Jul 30, 2019

rynowak pushed a commit that referenced this issue Jul 30, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 30, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 30, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak added a commit that referenced this issue Jul 30, 2019
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 30, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak added a commit that referenced this issue Jul 31, 2019
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 31, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
@jiggyswift

This comment has been minimized.

Copy link

commented Jul 31, 2019

@pranavkm Just a question: The Blazor team is concerned that stateful prerendering will make it too easy to initiate a DOS attack just by issuing a bunch of GET requests. But even after removing stateful prerendering, doesn't that just mean an attacker now needs to issue the GET requests AND open the web socket connections (many thousands of times concurrently)?
Granted the difference is the attacker would actually need to hold open those connections. But does this really make a difference to someone wanting to attack a blazor site? It sure was a nice feature and sad to see it go. But we also understand the time constraints and want to see Blazor go live.

@rynowak

This comment has been minimized.

Copy link
Member Author

commented Jul 31, 2019

Granted the difference is the attacker would actually need to hold open those connections. But does this really make a difference to someone wanting to attack a blazor site? It sure was a nice feature and sad to see it go. But we also understand the time constraints and want to see Blazor go live.

We generally think about DOS attacks as cases where:

  1. A client can easily force the server to do a lot of work - a small request triggers a lot of processing - the details are in the scale factor between client effort and server effort OR
  2. A client can easily exhaust a fixed pool of resources and damage the availability of the server

The concerns about stateful prerendering for about the second case.

The DOS vector here was that your application using stateful prerendering relies on the same set component instances being used:

  1. When the initial HTTP request happens
  2. When a websocket connection is opened

This means that if the same literal .NET objects are not still available between these two points, your application won't work correctly.

We had/have a feature currently to enable this, and it relies on holding a pool of "disconnected" circuits - that are either waiting for their owner to connect, or reconnect. We need to keep some number of circuits in the pool (remember, every new user to your app has to do this dance) and we have to keep them for some reasonable amount of time for your browser to connect or reconnect.

The problem with this is that it's an easy resource for a client to exhaust.

  1. Client does a request
  2. Server does prerendering and creates a circuit
  3. Circuit is stored for the client to connect to later
    4a. Client never opens a web socket, eventually the circuit times out and is evicted due to capacity
    4b. Client opens a web socket, hopefully the circuit is still there!

If we use a small pool size (< 1000) it's trivial for a single client to exhaust. Your server doesn't fall over, but non-malicious users have no hope of getting a legit connection. If you don't limit the pool, or use a large size then a client can easily fill up your memory.

Compare this to what happens with non-stateful prerendering

  1. Client does a request
  2. Server does prerendering and then cleans up all of the state
    3a. Client never opens a web socket, nothing bad happens because the state was already cleaned up
    3b. Client opens a web socket, can always connect because its stateless

If we wanted to keep it, we could provide a set of knobs and dials to configure these sizes, but there doesn't seem to be a safe and universal default. It's hard to come up with a recommendation to use the feature in the end unless all of your traffic is internal and trusted - and we try to avoid shipping features we don't recommend.

We're already have some ideas about how to deliver the same functionality in the future, but we're not taking it on for this release. If you feel really strongly about having a way to initialize components with state during prerendering - please log an issue and show us a little bit of what you want to use it for. The number and kinds of requests we get will help us understand the demand.

rynowak pushed a commit that referenced this issue Jul 31, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
@javiercn

This comment has been minimized.

Copy link
Member

commented Jul 31, 2019

@rynowak This made me think of something. Wouldn't long polling be on the same boat as this? Could I not send you a negotiate/connect/startcircuit triplet to achieve the same result?

The difference is I send you 3 requests vs 1, but you don't get to notice you are disconnected until I either

  1. stop sending you ping requests.
  2. a certain amount of time passes.

But for me as an attacker it should be relatively easy to spawn the server with connections and "keep them alive" using long polling.

Should we also consider disabling long polling?

@chrdlx

This comment has been minimized.

Copy link

commented Jul 31, 2019

Should we also consider disabling long polling?

In such case, please be merciful, and leave an option to re enable it under our risk.
I'm probably not the only one working on a company with a Windows Server 2008 R2, and that windows version doesn't support websocket =(

@mkArtakMSFT mkArtakMSFT moved this from To do to In progress in Blazor Jul 31, 2019

rynowak added a commit that referenced this issue Jul 31, 2019
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 31, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak pushed a commit that referenced this issue Jul 31, 2019
Ryan Nowak
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.
rynowak added a commit that referenced this issue Aug 1, 2019
Remove stateful prerendering
Fixes: #12245
Fixes: #12630

This change removes stateful pre-rendering from Server-Side Blazor. This
means that when you render a component during the initial HTTP request,
we we will no longer preserve the component instances and their
parameters. While this feature was useful, it cause serious scalability
concerns.

This means that it will now be required to register "entry-point"
components in startup similar to client-side Blazor.

@rynowak rynowak added Done and removed Working labels Aug 1, 2019

@rynowak rynowak closed this Aug 1, 2019

Blazor automation moved this from In progress to Done Aug 1, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.