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

Tan*_*wer 17 c# blazor .net-core-2.1

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

我已经在这个Framework及其出色的工具中开发了一个小项目。

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

在此处输入图片说明

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

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

没有关于它们之间差异的信息,

谁能告诉我这两个模板之间的区别是什么,何时应选择哪个?

Luk*_*ski 10

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

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

Blazor Full-Stack模板包含与客户端模板相同的项目结构,并增加了一些内容。就像客户端模板一样,服务器不会呈现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套接字双向发送。对于用户

  • 还值得查看[示例 Blazor 应用程序](https://github.com/aspnet/samples/tree/master/samples/aspnetcore/blazor/Validation) - 客户端和服务器端。请注意项目结构 - 服务器只是一个项目,而客户端具有用于服务器托管 API 和客户端应用程序的单独项目。 (2认同)

Jac*_*der 10

更新
从 .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 现已推出


这是 一篇很容易解释的文章

客户端:(模板选择中的第一个 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 更新等)都需要信号连接。
  • 适用于数据库连接和操作。您可以使用 Web API 来使用和执行数据库操作。
  • 由于浏览器 DevTools 处于使用 Web 程序集的初始阶段,因此无法对客户端部件进行调试。
  • 根据应用程序端的不同,初始页面加载可能会很高,因为所有必需的 DLL/程序集都将在浏览器中下载。
  • 不支持 IE11。

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

在此处输入图片说明

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

  • 对 ASP.NET Core 托管和服务器端模型的解释不正确。ASP.NET Core 托管的 Blazor 应用根本不建立 SignalR 连接。它与客户端版本相同,只是 ASP.NET Core 向客户端提供 Blazor 应用程序的资源。您链接到的文章写得非常糟糕,并且充满了技术和概念错误。请参阅 https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-3.1#blazor-web assembly (4认同)

Jaz*_*azb 9

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

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

利与弊– 在此处了解更多信息

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

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

  • 我感到困惑的是,为什么这么多人似乎无法回答问题,却将其标记为答案。问题是要询问“ ASP.NET Core Hosted”和“ ASP.NET Core中的服务器端”之间的区别,而不是服务器端与客户端之间的区别。我有什么误解? (8认同)
  • 我个人认为您正在为您的时间做出很好的投资。这些JS框架具有庞大的学习曲线,并且会不断变化,而Blazor的目标是解决很多此类问题,而始终只是了解C#。至于基准测试-我会等到他们发布后再进行。但是,客户端托管的模型可能是一个更为公平的比较(甚至更遥远的发布日期) (4认同)
  • 链接已死,这里是替换:https://docs.microsoft.com/zh-cn/aspnet/core/razor-components/hosting-models?view=aspnetcore-3.0 (2认同)