簡體   English   中英

在紅隼中托管 blazor wasm asp.net 核心托管應用

[英]Hosting blazor wasm asp.net core hosted app in kestrel

我在托管blazor wasm asp.net core hosted應用程序時遇到問題。該解決方案有 3 個項目: ClientSharedServer

當我運行命令do.net publish --configuration Release時,它將庫發布到解決方案中各自的文件夾,如下所示:

  • WebWorkbench3\客戶端\bin\Release.net5.0\publish
  • WebWorkbench3\ Server \bin\Release.net5.0\publish
  • ...

我假設由於server項目正在引用client - 那么我托管應用程序的步驟如下:

  1. 在powershell中打開WebWorkbench3\Server\bin\Release.net5.0\publish
  2. 運行命令do.net.\WebWorkbench3.Server.dll

在此處輸入圖像描述

  1. 導航到: https://localhost:5001/
  2. 結果:
  • 預期:客戶頁面打開
  • 實際:頁面停留在“正在加載..”字符串。 在控制台中,我們看到有關未加載_framework/blazor.webassembly.js的錯誤。

在此處輸入圖像描述

  1. 如果我們要檢查服務器應用程序中的wwwroot文件夾內容,我們將看到以下內容:

在此處輸入圖像描述

所以這解釋了為什么顯示錯誤。 但是我現在的問題是——項目中的發布過程/配置是否應該負責將客戶端的wwwroot內容復制到服務器的應用程序 output 目錄中? 如果我們在 VisualStudio 中啟動調試 session,然后我們使用server作為啟動點,那么項目應該知道在哪里查找blazor.webassembly.js文件 at..

在此處輸入圖像描述

那么為什么在發布過程中不發生相同的過程呢?

注意:我能夠通過手動復制客戶端的wwwroot目錄並將內容放入服務器的wwwroot目錄來解決這個問題......但我不認為服務應該如何工作?

編輯:我剛剛嘗試在 IIS 中設置client blazor 應用程序。它有效。 有點兒。 頁面打開。 但是當它嘗試向服務器發出 REST GET 請求時 - 它使用相同的hostname:port組合。 因此,如果我的應用程序托管在mysite.local:50001上,那么對 API 的請求將類似於mysite.local:50001/data/loadall ,其中data是 controller 名稱, loadall是操作名稱。所以基本上客戶端使用相同的作為服務器的基地址。問題是我無法在與客戶端相同的端口上啟動服務器:嘗試這樣做 - 您將看到以下輸出: 在此處輸入圖像描述

所以基本上我有和以前一樣的問題 - 如何托管在客戶端和服務器之間拆分的 wasm 應用程序? 我很確定我可以通過強制客戶端使用非標准服務器端口並在該端口上為server部分提供服務來使其工作。但是,我相信當前配置應該是有原因的(blazor 中的默認配置wasm 模板)以這種方式配置,因此應該可以以某種方式運行項目而無需任何其他更改。

好吧,這將是一個自我回答..而不是在解決方案級別發布( dotnet publish --configuration Release )應用程序 - 在項目級別發布..

  • ..\repos\WebWorkbench3\WebWorkbench3
  • ..\repos\WebWorkbench3\WebWorkbench3\Server之后

在一種情況下,編譯器不會將_framework文件夾(可能還有其他一些文件)復制到wwwroot .. 正確發布服務器后,您可以通過使用dotnet.\WebWorkbench3.Server.dll命令來訪問應用程序。

具有如上所述的相同問題:

前:
解決方案文件

  • 有相同的名字
  • 在同一個文件夾中

作為服務器項目

解決
我將解決方案移至項目根目錄(上一級)。

現在,服務器項目中的 do.net do.net publish按預期生成了__framework文件夾 + 內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM