Blazor WebAssembly を GitHub Actions で GitHub Pages に発行する - koudenpaのブログ ではBlazorの2種類のホスティングモデルのうち Blazor WebAssembly を GitHub Pages に配置した。もう一方のBlazor ServerはASP.NET Coreアプリケーションとしてホスティングする必要がある。そちらも試した。どうやったのかと所感を書いておく。
Blazor Serverのホスティング
今回はとりあえずホスティングしたかったのでVisual StudioのウィザードでAzureのリソース(App Service + SignalR Service)を作成してしまった。楽ちんだ。
Blazor Serverは単にASP.NET Coreのアプリケーションなので、いかようにもAzureにはデプロイできる。もちろんドキュメントを参照するとVisual Studioからのデプロイも案内されている。必要なリソースもウィザード形式で行えて楽だった。
また、Azure Pipelines上にCI/CDを構成するウィザードも提供されている。これを使ってPipelineを構成したところ、ASP.NET Core 2.x までの構成となってしまった。仕方ないのでタスクを編集して3.x対応した。それにしてもひな形が構成されるのは便利だ。そのうち3.xにも対応されるだろう。後はARMテンプレートを使ってのIaCや、Pipelinesもコード管理向けYAMLが出力も構成されるとより便利ではないか? といったところだ。この辺りは気が向いたらコード管理する形にしてみたい(特にARMテンプレート)。記事にまとめるにしてもそちらの方にしたい(~~したい。の実現性は低そう)。
Blazor Componentの互換性
Blazor Serverのホスティングで試してみたかったのは、Blazor ComponentのWebAssembly : Server間での互換性だ。
Blazor ホスティングモデルの ASP.NET Core | Microsoft Docs
などと謳われているのだから試してみたくもなるだろう。
今回はHello Worldしたアプリケーションを丸ごとRazor Components Library(RCL)に切り出して、まったく同じコンポーネントをWebAssembly、Serverでホスティングしてみた。
当然ながらWebAssembly、Serverでサポートされない実装があるとエラーするのだが、ホスティング自体は何の問題もなく行えて一見全く同じ動作をする。これは素直にすごいと思った。ブラウザにどんどんDLLがダウンロードされるのはなかなか迫力もある。
- Blazor WebAssembly
- Blazor Server
- RCL
.NET Standardのランタイムはどんどん充実している。
Blazor Server のアーキテクチャとどのような場合に使うのかについての所感
Blazor Serverは独特なアーキテクチャをしている。クライアントとサーバー間はSignalRで接続され、ユーザーがブラウザ上で行った操作がサーバーに送信、処理され、処理結果のDOMの差分が返却、反映される。
一見すると意味が分からない構成だが、ASP.NET AJAXの延長線上と考えるとそれほど違和感もない。(ここでkoudenpa内で色々な思考の飛躍があるが言語化するのが大変なので割愛)や、以下のようなドキュメントが密に用意されていることから、既存の膨大なASP.NET WebFormsアプリケーションの資産を移行する先とする狙いがありそうだ(そういう発信もされているのかも? Blazorに関する発信はほとんど見ていない)。