5

我一直在阅读很多关于 Blazor 和不同托管模型的文章(实际上是 3 篇)。最容易理解的是纯客户端模型,它是一个在 webassembly 上运行的独立应用程序。那里没问题。但我仍然难以理解服务器模型和使用 ASP.NET Core Hosted(复选框)模型的 WebAssembly 模型之间的区别。

请帮我澄清一些事情。

1) 对于服务器模型,浏览器使用 signalR 连接到服务器应用程序。它是 Visual Studio 中的一个应用程序。ASP.NET Core Hosted 模型将单个应用程序拆分为两个单独的应用程序客户端和服务器是否正确理解。客户端是一个 WebAssembly 应用程序,它仍然使用 SignalR 与服务器应用程序通信以获取事件和获取数据?

2)在客户端和服务器应用程序之间,我看不到它们有任何关系或类引用,除了服务器应用程序引用客户端应用程序。我可以删除客户端应用程序引用,它仍然可以编译。但是,该站点是空的。那么服务器应用程序如何知道从客户端应用程序加载内容的位置呢?仅仅是因为引用了客户端应用程序吗?“挂钩”在哪里?我问这个的另一个原因是我已经开始开发一个使用服务器模型的网站,但是现在如果我想使用 ASP.NET Core Host 更改为客户端模型,我该怎么做?

3) 在服务器应用程序中,有 _Layout.cshtml 文件。在客户端应用程序中,wwwroot 下有 index.html。它是被渲染的 index.html。那么 _Layout.cshtml 是干什么用的呢?

4)我从示例 VS 模板中看到,Server 应用程序用作 API 服务(天气预报)。在我的环境中,我已经有一个可以使用的专用 API 服务。那么我将服务器应用程序用于什么?托管客户端应用程序是否只是一个空的 .NET 核心应用程序?除了 API 调用之外,您如何使用服务器应用程序?

4

1 回答 1

10

这是一个正确的理解[...]。客户端是一个 WebAssembly 应用程序,它仍然使用 SignalR 与服务器应用程序通信以获取事件和获取数据?

不。

Blazor 服务器:您的代码在服务器上运行,并使用 SignalR 推送更改。
Blazor Webassembly:在浏览器中运行,独立。
Blazor Webassembly 托管:在一个解决方案中包含 3 个项目。这只是一个方便的模板。Asp.NET 服务器部分(不是 Blazor 应用程序)为客户端提供服务,并且是托管 API 的地方。

Blazor Wasm 可以将 SignalR 作为一项额外功能使用,但它不需要它来运行。

在客户端和服务器应用程序之间,我看不到它们有任何关系或类引用,除了服务器应用程序引用客户端应用程序。

正确的。服务器只需要该引用来查找 Wasm 应用程序的(输出)文件。您可以删除引用并使用路径字符串配置某些内容。这两个项目之间没有“技术”联系。它们在不同的平台上运行。

在服务器应用程序中,有 _Layout.cshtml 文件。... 那么 _Layout.cshtml 是干什么用的?

当您向项目添加授权时使用它。当您不使用授权时它就在那里的事实可能是一个疏忽。要查看它的实际效果,请创建一个启用了个人帐户的服务器或托管项目。登录等页面使用 _Layout.cshtml

我已经有一个可以使用的专用 API 服务。那么我将服务器应用程序用于什么?

那么你就不需要它了,你应该只使用简单的 WebAssembly 模板。您可以查看示例如何使用共享程序集 (DTO) 并为客户端提供服务。您可以在您的服务中使用其中的一部分,也可以不使用。

于 2020-06-04T19:39:53.130 回答