繁体   English   中英

Blazor WASM 应用程序中“托管 ASP.NET Core”的目的是什么?

[英]What's the purpose of "ASP.NET Core hosted" in Blazor WASM app?

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

在此处输入图像描述

如果您勾选这个而不是解决方案中的 1 个 WASM 项目,则有 3 个,Client (WASM)、Shared 和 Server。

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

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

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

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

我找不到直接的答案。 要么这篇文章没有回答它 - 或者我遗漏了一些东西: ASP.NET 核心托管和服务器端 Blazor 之间有什么区别,真的吗?

我找不到别的东西了。

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

谢谢。

更新

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

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

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

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

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

然而,几乎没有任何丰富的应用程序甚至不需要基本的数据库连接。 那么一个应用程序——比如一个维护排行榜的游戏应用程序——如何与远程维护应用程序数据的应用程序服务器和数据库通信呢? 这是托管 model 派上用场的地方。 In a typical web application scenario, you essentially need three components 1) Client side code - the app 2) Server side code - the web API - to maintain state 3) Shared object model - so that the first two can communicate seamlessly. 这就是您在“.net core hosting”选项中看到的内容。 该模板为所有三个组件创建样板。 客户端和服务器都将使用的类放在共享项目中。 服务器端和客户端逻辑存在于各自的项目中,并且两者都引用共享项目而不相互引用。

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

如果我将 WASM 应用程序部署到 IIS 服务器,它在没有服务器应用程序的情况下运行良好。

是的,它确实。 但作为客户端应用程序,它无法访问任何服务器资源(如数据库或文件系统)。 它还受到 CORS 的限制,只能访问某些网络资源。

所以客户端应用程序通常必须依赖 API 服务器来完成任何事情。 这就是托管模板所提供的。

请注意,共享项目包含客户端和服务器都可以使用的 C# 类和代码,这为您提供了具有单点定义的强类型 DTO。

使用此模板的主要原因和好处是 Server\Program.cs 中的这两行

app.UseBlazorFrameworkFiles();
...
app.MapFallbackToFile("index.html");

这使得服务器托管客户端。 虽然仍然是功能齐全的 API 服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM