簡體   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