【问题标题】:What's the purpose of "ASP.NET Core hosted" in Blazor WASM app?Blazor WASM 应用程序中“托管 ASP.NET Core”的目的是什么?
【发布时间】:2022-01-16 17:08:56
【问题描述】:

在 Visual Studio 2022 中创建新的 Blazor WebAssembly 应用时,有一个“ASP.NET Core 托管”选项(带有无用的工具提示)。

如果在解决方案中勾选此项而不是 1 个 WASM 项目,则有 3 个,客户端 (WASM)、共享和服务器。

虽然 Blazor Server 应用是启动项目,但它没有页面。当您运行它时,它会调用 WASM Blazor 客户端应用程序。

我无法解释这样做的目的是什么?如果我将 WASM 应用程序部署到 IIS 服务器,它在没有服务器应用程序的情况下运行良好。

注意,我不是在问 Blazor 服务器(在服务器上运行的服务器端代码,将 HTML 发送到客户端)和 Blazor 客户端 WASM(编译成在浏览器中运行的 WebAssembly 的 C# 代码)之间的区别。这个我知道。

如果您打算创建 WASM 应用程序,我想问为什么您需要在带有 Blazor WASM 应用程序的解决方案中使用 Blazor Server 应用程序。

我找不到直接的答案。要么这篇文章没有回答它 - 要么我错过了一些东西: What's the difference between ASP.NET Core Hosted and Server-Side Blazor, really?

我找不到其他任何东西。

那么 Blazor Server 应用程序的用途是什么,为什么它首先运行然后调用 WASM 应用程序。另外,您将如何主持?

谢谢。

更新

我知道 WASM 应用程序只是客户端,你需要一个 Web API 项目来连接,以便从 Web 服务器中提取数据。

这个“.net Core Hosted”模板是否正在做一些我自己无法通过使用 WASM 项目创建解决方案 - 然后添加 Web API 项目(和各种共享项目)的事情?

【问题讨论】:

  • 拥有一台服务器可以简化提供 API 的控制器和集线器。
  • “Blazor Server 应用程序没有页面”:当您使用 MS Identity 登录时它会出现。使用 razor 页面。

标签: blazor blazor-server-side blazor-webassembly


【解决方案1】:

Blazor 服务器应用几乎可以像分布式桌面应用一样工作。浏览器上的每个事件都会发送到服务器,服务器处理事件,计算 DOM 中产生的变化并发送 diffed DOM,然后由浏览器端 js 应用到页面并更新页面。

这里使用传统的 Web API 样式模式是完全可选的。在 Blazor 服务器应用程序中,您无需编写单个 Web API 即可使应用程序正常工作。一切都可以写成一个单独的桌面应用程序。

WebAssembly 应用程序更丰富。该应用程序实际上在浏览器上运行,一切(事件处理、UI 刷新等)仅在客户端完成。这些是所谓的“静态应用程序/网站”,一旦加载,就不需要执行任何其他操作。想象一下单人 Flash 风格的游戏——它们不需要连接到数据库/应用程序服务器。

但是,几乎没有任何功能丰富的应用程序甚至不需要基本的数据库连接。那么一个应用程序——比如一个维护排行榜的游戏应用程序——如何与远程维护应用程序数据的应用程序服务器和数据库通信呢? 这是托管模型派上用场的地方。在典型的 Web 应用场景中,您基本上需要三个组件 1)客户端代码 - 应用程序 2)服务器端代码 - Web API - 维护状态 3)共享对象模型 - 以便前两者可以无缝通信。 这就是您在“.net core hosting”选项中看到的内容。该模板为所有三个组件创建样板。客户端和服务器都将使用的类放在共享项目中。服务器端和客户端逻辑存在于各自的项目中,并且它们都引用共享项目而不相互引用。

运行 WebAssembly 应用程序是否必须具有此功能?不可以。您可以在您选择的任何平台上编写服务器端逻辑 - 它不必是 asp.net - 并从 Blazor webassembly 应用程序调用该 API。但是,您最终仍会为客户端服务器通信类创建映射器。 .net 核心托管选项提供了一种非常方便的方式来执行此操作。

【讨论】:

  • 谢谢。这是一个有用的模板。我是否仍然需要使用 WebAPI(JSON 等)、JWT 等来获取服务器上的数据以显示在应用程序中、登录等?或者这个模板是否提供了其他方式来做到这一点?
  • 模板是否与我只是使用 Blazor WASM 项目创建解决方案,然后添加 Web API 项目、模型项目等有根本不同?
  • 因为客户端和服务器共享相同的对象模型,JSON 序列化只是使用开箱即用的 .net 核心库 JSON 类发布和读取响应的问题。您不需要额外的映射。通过 JWT,我假设您正在谈论身份验证。您可以通过从下拉列表中选择一种(“身份验证类型”)来选择使用捆绑的身份验证模式。如果要设置其他身份验证,则必须编写自己的代码。
  • 这说 '.net Core hosting' 使用 SignalR 做某事:syncfusion.com/blogs/post/3-blazor-hosting-models.aspx 所以它不仅仅是为你创建一个 Web API?!
  • 删除了我的评论。查看托管模型的要点是允许客户端服务器解耦并让开发人员选择一种客户端服务器通信方式 - WebAPI、gRPC、SignalR 或任何其他方式。所以这可能包括信号器。不希望读者认为 SignalR 专门用于 Blazor 服务器或任何东西。例如,在多人游戏或聊天应用程序中,您将需要使用 SignalR hub 进行通信。
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2021-10-19
  • 2019-04-03
相关资源
最近更新 更多