【问题标题】:Blazor, ASP.NET Core Hosted vs Server Side in ASP.NET CoreBlazor,ASP.NET Core 托管与 ASP.NET Core 中的服务器端
【发布时间】:2019-04-19 07:15:03
【问题描述】:

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

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

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

首先是 Blazor(托管 ASP.NET Core)

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

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

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

【问题讨论】:

  • 所以 ASP.NET Core Hosted Blazer App 在某种程度上与 Angular App 相似,带宽使用更少,离线支持,无服务器端代码依赖,以及使用 Web 程序集而不是 JavaScript
  • Blazor 是一项新技术,它消除了您需要接触的 99% 的 JS。您需要自己阅读更多内容才能获得第一手的答案。如果需要,很乐意为您提供更多链接
  • 我还是找不到 ASP.NET Core 托管Server-side Blazor 的区别...可惜...

标签: c# .net-core-2.1 blazor


【解决方案1】:

我认为接受的答案不能回答像其中一个 cmets 中提到的 Mike-EEE 那样提出的问题。

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

Blazor 全栈模板包含与客户端模板相同的项目结构,但添加了一些内容。就像客户端模板一样,服务器没有呈现 HTML,所有文件都作为静态文件传递给客户端,包括 .NET 二进制文件。但是,不同之处在于添加了 ASP.NET Core 托管和 Web API 以及用于通用应用程序逻辑的共享项目。

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

Blazor 服务器端项目模板对 Blazor 应用程序的交付方式和与浏览器的交互方式采用了截然不同的方法。使用服务器端配置时,Blazor 通过将 SignalR JavaScript 应用程序部署到客户端,将浏览器用作“瘦客户端”。在服务器上,Blazor 实现了一个 SignalR 集线器,通过 Web 套接字与客户端通信。在服务器端托管模型中,Blazor 在服务器上从 ASP.NET Core 应用程序中执行。 UI 更新、事件处理和 JavaScript 调用通过 SignalR 连接进行处理。在此配置中,不需要 WebAssembly,并且 Blazor 在服务器的 ASP.NET Core 运行时上执行。所有 UI 更新都作为差异发送,作为二进制数据包通过 Web 套接字双向发送。对于用户而言,该应用程序与任何其他 Web 应用程序没有区别。

【讨论】:

  • 同样值得关注sample Blazor apps - 客户端和服务器端。请注意项目结构 - 服务器只是一个项目,而客户端为服务器托管的 API 和客户端应用程序有单独的项目。
【解决方案2】:

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

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

优点和缺点 - read more here

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

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

【讨论】:

  • Thnaks ,我没有将它用于生产版本。与 Angular 相比,只是做一些基准测试
  • 就我个人而言,我认为您对自己的时间进行了很好的投资。这些 JS 框架有一个巨大的学习曲线并且不断变化,而 Blazor 旨在解决很多这个问题,而一直只了解 C#。至于基准测试——我会推迟到他们发布。客户端托管模型可能是一个更公平的苹果对苹果的比较(甚至更远的发布日期)
  • 同意你,谷歌在 12 个月后结束对每个 Angular 版本的支持(来自他们的官方文档)
  • 我很困惑为什么这么多人将其标记为答案,而它似乎没有回答这个问题。问题是询问“ASP.NET Core Hosted”和“ASP.NET Core 中的服务器端”之间的区别,而不是服务器端与客户端的区别。我误解了什么?
【解决方案3】:

更新
从 .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 的浏览器中运行客户端。 Blazor 应用、其依赖项和 .NET 运行时下载到浏览器。该应用程序直接在浏览器 UI 线程上执行。 UI 更新和事件处理发生在同一个过程中。应用的资产作为静态文件部署到能够为客户端提供静态内容的 Web 服务器或服务中。

Blazor 服务器应用程序

使用 Blazor 服务器托管模型,应用程序在 ASP.NET Core 应用程序内的服务器上执行。 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,很容易解释:

客户端:(模板选择中的第一个 Blazor 模板):

在这种托管模式中,应用程序在浏览器的客户端执行。 Blazor 应用、其依赖项和 .NET 运行时下载到浏览器。该应用程序直接在浏览器 UI 线程上执行。 UI 更新和事件处理发生在同一个过程中。此执行模式在 .Net Core 的预览版中可用。

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

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

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

  • DOM 更新将在托管于 ASP.NET Core 服务器。
  • 不要在离线模式下工作,因为需要信号连接 各种操作(事件调度、DOM 更新等)。
  • 适用于数据库连接和操作。您可以使用网络 用于使用和执行数据库操作的 API。
  • 客户端部分无法调试,因为浏览器 DevTools 位于 使用 Web 程序集的初始阶段。
  • 初始页面负载可能很高,具体取决于应用程序端 所需的 DLL/程序集将在浏览器中下载。
  • 不支持 IE11。

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

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

【讨论】:

猜你喜欢
  • 2020-09-30
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多