我在托管 blazor wasm asp.net core hosted
应用程序时遇到问题。该解决方案有 3 个项目:客户端、共享和服务器 .
当我运行命令 dotnet publish --configuration Release
时,它将库发布到它们各自的解决方案文件夹中,如下所示:
我认为由于 server
项目引用了 client
- 那么我托管应用程序的步骤如下:
WebWorkbench3\Server\bin\Release\net5.0\publish
dotnet .\WebWorkbench3.Server.dll
https://localhost:5001/
_framework/blazor.webassembly.js
未加载的错误。wwwroot
文件夹内容,我们将看到以下内容:所以这解释了为什么会显示错误。但是,此时我的问题是 - 项目中的发布过程/配置是否应该负责复制客户端的 wwwroot
内容到服务器的应用程序输出目录中?如果我们在 VisualStudio 中启动调试会话,那么我们使用 server
作为启动点,因此项目应该知道在哪里查找 blazor.webassembly.js
文件位于..
那么为什么在发布过程中没有发生同样的过程?
注意:我能够通过手动复制客户端的 wwwroot
目录并将内容放入服务器的 wwwroot
目录中来解决该问题...但我没有难道这不应该是服务的工作方式吗?
编辑:我刚刚尝试在 IIS 中设置 client
blazor 应用程序。它有效。的种类。页面打开。但是当它尝试向服务器发出 REST GET 请求时 - 它使用相同的 hostname:port
组合。因此,如果我的应用托管在 mysite.local:50001
上,那么对 API 的请求将类似于 mysite.local:50001/data/loadall
,其中 data
是控制器名称,loadall
是操作名称。所以基本上客户端使用与服务器相同的基地址。问题是我无法在与客户端相同的端口上启动服务器!尝试这样做 - 您将看到以下输出:
所以基本上我有和以前一样的问题 - 如何托管在客户端和服务器之间拆分的 wasm 应用程序?我很确定我可以通过强制客户端使用非标准服务器端口并在该端口上提供 server
部分来使其工作。但是,我相信当前配置(默认blazor wasm 模板中的配置)是以这种方式配置的,因此应该可以以某种方式运行该项目,而无需进行任何其他更改..
答案 0 :(得分:1)
好吧,这将是一个自我回答......而不是在解决方案级别发布 (dotnet publish --configuration Release
) 应用程序 - 在项目级别发布......
..\repos\WebWorkbench3\WebWorkbench3
之前..\repos\WebWorkbench3\WebWorkbench3\Server
之后在 1 种情况下,编译器不会将 _framework
文件夹(可能还有一些其他文件)复制到 wwwroot
中。一旦您正确发布了服务器,您就可以通过为它提供服务来访问该应用程序dotnet .\WebWorkbench3.Server.dll
命令。