Blazor,ASP.NET 核心托管与 ASP.NET 核心中的服务器端

Blazor, ASP.NET Core Hosted vs Server Side in ASP.NET Core

我正在尝试 blazor.Net 这是一个实验框架。

我已经在这个框架中开发了一个小项目,非常棒。

但是在 11 月 14 日对 Blazor 语言服务进行了最近更新之后,我在模板选择中看到了两个选项。

首先是 Blazor(ASP.NET 核心托管)

其次是 Blazor(ASP.NET 核心中的服务器端)

没有关于它们之间区别的信息,

谁能告诉我这两个模板有什么区别,什么时候应该选择哪个?

在服务器端托管模型中,Blazor 从 ASP.NET 核心应用程序中在服务器上执行。 UI 更新、事件处理和 JavaScript 调用通过 SignalR 连接处理。

在客户端模型中,Blazor 应用及其依赖项和 .NET 运行时被下载到浏览器,应用直接在浏览器 UI 线程上执行。所有 UI 更新和事件处理都发生在同一个进程中。

优缺点 – read more here.

服务器端模型被认为首先发布的风险较小,因此我们将在 asp.net 3.0 中首先看到它。客户端稍后来。

警告:在我们获得受支持的版本之前,请勿在生产代码中使用。

我认为接受的答案没有回答像其中一条评论中提到的 Mike-EEE 那样提出的问题。

必要的信息可以在这个link下找到: https://www.telerik.com/blogs/a-breakdown-of-blazor-project-types

The Blazor Full-Stack template encompasses the same project structure as the Client-Side template with a few additions. Just like the Client-Side template there is no HTML rendered by the server and all files are delivered to the client as static files including .NET binaries. The difference however is added ASP.NET Core hosting and Web API and a Shared project for common application logic.

该模板包括三个项目:一个客户端 Blazor 应用程序 Blazor.Client、一个 ASP.NET 核心服务器应用程序 Blazor.Server,以及一个用于通用应用程序逻辑的共享 .NET Standard 项目Blazor.Shared.

The Blazor Server-Side project template takes a significantly different approach to how a Blazor application is delivered and interacts with the browser. When using the server-side configuration Blazor utilizes the browser as a "thin-client" by deploying a SignalR JavaScript application to the client. On the server, Blazor implements a SignalR hub communicating with the client via web sockets. In the server-side hosting model, Blazor is executed on the server from within an ASP.NET Core app. UI updates, event handling, and JavaScript calls are handled over the SignalR connection. In this configuration there is no need for WebAssembly and Blazor is executed on the ASP.NET Core runtime at the server. All UI updates are sent as diffs, bidirectionally as binary packets over web sockets. To the user, the application is indistinguishable from any other web application.

更新
从 .Net core 3.0 开始,Blazor 提供了 2 种托管模型

  • Blazor WebAssembly 应用
  • Blazor 服务器应用程序

https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-3.1

Blazor WebAssembly 应用程序

Blazor 的主要托管模型是 WebAssembly 浏览器中的 运行 client-side。 Blazor 应用程序、其依赖项和 .NET 运行时将下载到浏览器。该应用程序直接在浏览器 UI 线程上执行。 UI 更新和事件处理发生在同一个进程中。应用程序的资产作为静态文件部署到网络服务器或能够为客户端提供静态内容的服务。

Blazor 服务器应用程序

使用 Blazor 服务器托管模型,应用程序从 ASP.NET 核心应用程序中在服务器上执行。 UI 更新、事件处理和 JavaScript 调用通过 SignalR 连接处理。

注意:ASP.NET Core 3.0 支持 Blazor Server,并且 Blazor WebAssembly 在 Microsoft build 2020 期间从 .NET Core 3.1.4 正式发布

Blazor WebAssembly 3.2.0 now available


这里是article,解释起来很容易:

Client-Side:(模板选择中的第一个 Blazor 模板):

在此托管模式中,应用程序在浏览器中执行 client-side。 Blazor 应用、其依赖项和 .NET run-time 下载到浏览器。该应用程序直接在浏览器 UI 线程上执行。 UI 更新和事件处理发生在同一个进程中。此执行模式可用于 .Net Core 的预览版。

  • 由于整个应用程序驻留在浏览器中,DOM 更新将 在浏览器本身中处理。
  • 在离线模式下工作,因为不涉及服务器交互。
  • 不适合数据库连接,因为它需要发送 到客户端的连接字符串,这可能是一个潜在的安全风险。
  • 调试困难,浏览器DevTools处于起步阶段 使用网络程序集。
  • 初始页面加载可能很高,因为所有需要的 DLL/Assemblies 都将在浏览器中下载。
  • 不支持 IE11。

ASP.NET 核心托管(模板选择中的第二个 Blazor 模板)

在此托管模式中,应用程序从 ASP.NET 核心应用程序中在服务器上执行。 UI 更新、事件处理和 JavaScript 调用通过 SignalR 连接处理。

  • DOM 更新将在托管在的服务器部分处理 ASP.NET核心服务器。
  • 不要在离线模式下工作,因为需要信号连接 各种动作(事件调度,DOM 更新等)。
  • 适合数据库连接和操作。您可以使用网络 使用和执行数据库操作的 API。
  • 无法对客户端进行调试,因为浏览器 DevTools 处于 使用web assembly的初级阶段。
  • 初始页面加载可能很高,因为所有应用程序端都是如此 需要 DLL/Assemblies 将在浏览器下载。
  • 不支持 IE11。

Server-side(模板选择中的第三个 Blazor 模板) 在此托管模式中,整个应用程序将驻留在 ASP.NET 核心服务器中,并且将从浏览器向服务器发出各种操作请求。由于这不会向浏览器发送任何形式的 DLL,因此它受到 IE11 等旧版浏览器的支持。

  • DOM 更新将在托管在的服务器部分处理 ASP.NET核心服务器。 SignalR 用于连接。
  • 不要在离线模式下工作,因为需要信号连接 各种动作(事件调度,DOM 更新等)。
  • 适合数据库连接和操作。您可以使用网络 使用和执行数据库操作的 API。
  • 调试很好。可以使用默认visual studio调试 调试应用程序的过程。
  • 初始页面加载会很好。
  • 支持 IE11,因为它不会向浏览器发送 WebAssembly。