ASP.NET Core HostedとServer-Side Blazorの違いって、ホントは何?
質問
の違いを理解するのにまだ苦労しています。 ASP.NET Core Hosted と サーバーサイド Blazor。私は同じ質問を既に知っている は存在する というのは知っていますが、納得がいきません。実際、私は満足のいく答えをどこにも見つけることができませんでした - 答えは多かれ少なかれ同じでした。
もし が主催する オプションがサーバ (IIS、Kestrel) を使用する場合、なぜ サーバサイド ? 紛らわしい...。公式ドキュメントも光を当ててくれなかったのが残念です...。
アップデイト
Blazor アプリケーションを作成するために、3つのオプションがあることが混乱の原因です。実行後
dotnew new --list
を得ました。
-
dotnet new blazorserver
(Blazorサーバーアプリ) -
dotnet blazorwasm
(Blazor WebAssembly App)
しかし、第3の選択肢もあります。
-
dotnet blazorwasm --hosted
(またはdotnet blazor --hosted
)
Visual Studioでアプリケーションを作成する際のチェックボックスと同じです。
この ドキュメント にはこうあります。
を選択すると、ASP.NET Core バックエンドを使用するようにアプリを構成するオプションがあります。 バックエンドを使用するようにアプリを構成するオプションがあり、ASP.NET Core hosted チェックボックスを選択します。
しかし、何の説明もありませんでした......どういうことでしょうか?
どのように解決するのですか?
更新
私はあなたが今来ている場所を参照してください。この混乱は、あなたが
--hosted
というオプションがあることに起因しています。このオプションは、BlazorにASP.NET Coreランタイムを含ませることを意味します。
なぜこのオプションなのか?なぜなら、外部サービスとの接続を必要としないオフラインアプリ(電卓アプリなど)を書くことができ、ASP.NET Coreは無関係になるからです。しかし、オンラインDBや外部APIにアクセスし、検証などを行うオンラインアプリを書きたいと思うかもしれません。このようなアプリの場合、アプリをサポートするために ASP.NET Core スタックが必要になります。
この FAQ を確認してください。 https://github.com/aspnet/Blazor/wiki/FAQ#q-can-i-use-blazor-with-aspnet-core-on-the-server
オリジナルの回答
サーバーホスト型とクライアントホスト型の2つのホスティングモデルがあります。
違いは、アプリがサーバーでホストされるか、クライアントでホストされるかということです。サーバー ホスティングでは、アプリのロジックはサーバーで実行され (Web Forms と同じように考えることができます)、ユーザーがボタンをクリックすると、Ajax 呼び出しがリクエストを送信し、サーバーがそのリクエストを受信して、更新したページを送り返します。しかし、ここではAjaxではなく、低レベルのソケット通信であるSignalRを使用しています(効率的と書いてあります)。また、ページ全体を更新するのではなく、関連する部分のみを更新します(したがって、シングルページアプリケーションとなります)。
一方、クライアントホスティングは、あなたのロジックがブラウザ内で実行されることを意味します。C# のロジックが JS に変換され、ページに埋め込まれるようなものだと考えてください。つまり、ロジックはブラウザの中で実行されるわけです。これは、WebAssemblyの導入後に可能になったもので、これについてはこちらをご覧ください。
例えば、電卓アプリを作成したいとします。サーバー ホスト型アプリでは、サーバーと通信して計算し、各計算の結果を取得する必要がありますが、クライアント ホスト型ではその必要がなく、ブラウザで結果を計算します。
なぜ 2 つのオプションがあるのか、不思議に思うかもしれません。その理由は、(クライアント ホスト型アプリが依存する)WebAssembly のサポートが多くのブラウザーで不完全または存在せず、パフォーマンスにも大きな違いがあるからです。
関連
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] int.Parse()とConvert.ToInt32の主な違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】画像のペイントにTextureBrushを使用する方法