ASP.NET Core 3.1中“Web应用程序”和“Blazor服务器应用程序”的区别

4

Web应用程序

Blazor服务端应用程序

你好,我正在尝试掌握.NET Core 3.1和Visual Studio 2019提供的模板。具体来说,我正在试图理解拥有Web应用程序(如第一幅图所示)与Blazor Server App(第二幅图)之间的区别。

通过研究,我了解到以下信息: - 两者均在.net core 3上运行 - 两者都使用Razor - 两者均在服务器级别上运行 - 两者都使用“代码后台”的概念/结构

然而: - Web应用程序使用.cshtml - Blazor Server App使用.razor

我认为Blazor Server App无需了解JavaScript即可进行数据绑定,并且具有使用C#代码进行绑定等优点。 我已经阅读了有关“Blazor Server App”和“Blazor WebAssembly App”的各种文档,这些文档非常棒。 然而,“Server app”和“Web Application”之间有明显的相似之处。

除了“Web Application”和“Blazor Server App”之外,还有哪些差异?


我想你已经说了一切 :) - Guillaume S.
3个回答

5
我已经阅读了一篇文章,它很容易地描述了这两者之间的区别及其优缺点。
Blazor WebAssembly托管模型的好处:
- Blazor WebAssembly应用程序可以完全在客户端机器上运行。因此,在应用程序下载后,不需要连接到服务器。这意味着您的服务器不需要24X7运行。 - 工作从服务器转移到客户端。使用的是客户端资源和能力。 - 我们不需要一个完整的ASP.NET Core Web服务器来托管应用程序。我们只需要一个可以将应用程序传递给客户端浏览器的服务器。这意味着我们可以将应用程序托管在我们自己的服务器上,或者在互联网上的云中、Azure上作为静态网站甚至在CDN内容交付网络上。
Blazor WebAssembly托管的缺点:
  • 第一个请求通常需要更长时间,因为整个应用程序、其依赖项和.NET运行时必须下载到客户端浏览器。请记住,只有第一个请求比平常要花费更长的时间。如果同一客户端以后访问该应用程序,它通常会启动得很快,因为浏览器缓存了文件。
  • 由于应用程序完全在客户端浏览器上运行,因此受限于浏览器的功能。
  • 根据应用程序的性质,需要具备能力的客户端硬件和软件。例如,从软件方面来说,至少需要支持WebAssembly的浏览器。

Blazor Server托管模型的优点:

  • 应用程序加载速度更快,因为下载大小明显小于Blazor WebAssembly应用程序。由于应用程序在服务器上运行,因此可以充分利用服务器功能,包括使用任何.NET Core兼容的API。
  • 所有客户端需要使用应用程序的是一个浏览器。即使是不支持WebAssembly的浏览器也可以使用。
  • 更安全,因为应用程序的.NET/C#代码不会提供给客户端。

Blazor Server托管的缺点:

需要一个完整的ASP.NET Core服务器才能托管该应用程序。无法使用无服务器部署方案,例如从CDN提供应用程序。
始终需要与服务器保持活动连接。这意味着需要让服务器24小时运行。如果服务器宕机,则应用程序停止工作。由于每个用户交互都涉及到与服务器的往返,因此通常存在比Blazor WebAssembly托管更高的延迟。
对于具有许多用户的应用程序,可伸缩性可能具有挑战性,因为服务器必须管理多个客户端连接并处理客户端状态。但是,通过在Blazor Server应用程序中使用Azure SignalR服务,我们可以克服这个可伸缩性问题。该服务通过支持大量并发SignalR连接,使Blazor Server应用程序非常适合扩展。
参考: https://www.pragimtech.com/blog/blazor/blazor-hosting-models/

4

这个 WebApplication 使用 .NetCoreRazor 页面创建网页,使用普通的 HTTP 请求在服务器和客户端之间进行通信。与之前一样,你仍然需要使用 JavaScript 调用方法,来在视图和模型/方法之间进行通信,并更新/刷新视图。它几乎是无状态的,你需要遵循我们在 ASP.Net MVC 中所采用的传统方法。

另一方面,Blazor 有两个版本: WebAssemblyServer-side

  1. "Blazor WebAssembly" 运行在客户端上,使用 WASM(WebAssembly)和 MONO,代码将下载到客户端上,在离线模式下可提供某些高级功能和可能性。但是,几乎所有东西都会被下载到客户端上,这使得第一次加载有点慢,还要考虑将代码直接下载到客户端上的问题。
  2. "Blazor Server-Side" 运行在服务器上,但通过 SignalR 连接同时更新客户端。因此,应该在客户端下载较少的数据,而且代码不会存在于客户端(关于安全方面),并且它是有状态的,这意味着客户端上所有元素的状态都将保留在服务器内存中,而且即使客户端失去连接,在新服务器上整个页面的状态也是未知的。(需要使用 localStoragesessionStorage 自定义方法来保持状态,并在建立新连接后将其映射到新服务器)。

通过使用 Blazor,你几乎可以使用 C# 来完成后端和前端的所有工作,几乎不需要使用 JS。虽然也可以从 C# 代码中调用 JS 函数(使用JSIntrop),并甚至可以从 JS 调用 C# 函数。

希望这个简短的解释有所帮助。这只是关于 .NetCore WebApplication 和 Blazor 的简要介绍。开发人员应该注意很多方面,以选择适合他们构建 Web 应用程序的方法。


2
一种 Blazor Server 应用程序在客户端上运行 JavaScript,并且所有交互都通过 SignalR 在客户端和服务器之间来回传递。
Web 应用程序模板设置了一个 Razor Pages 项目。尽管它们都使用 Razor 作为模板引擎生成 HTML,但 Razor Pages 项目更类似于 MVC,但没有控制器。客户端和服务器之间的通信基于传统的 HTTP 请求。客户端到服务器的通信是基于表单提交完成的,服务器将只响应从视图渲染出的 HTML。如果需要在客户端实现交互性,则需要使用 JavaScript 来实现。

是的,我忘了提到SignalR;我认为这是主要/重要的区别。基本上,Blazor使用的通信渠道是通过SignalR完成的,而另一个则使用POST/GET方法传递信息。 不过有一个小澄清,我可能有点不同意。我认为在两种情况下都没有“控制器”。我的理解是,两者都采用“代码后台”的概念,就像旧的WebForms一样。 - DabolB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接