以前、同じようなタイトルで、asp.net core blazor wasm版とSingalRの話を投稿した様な気がするが、blazor wasm版から既存のHubに接続できず、色々試したのだが、結局解決しなかった。
やはり、現状ではhostedプロジェクトとして作成し、同一ドメインでのみしかSignalRを利用できないようだ。
なので、とりあえず、hostedプロジェクトを試してみた。
まず、下記コマンドで、クライアントとサーバプロジェクトを作成する。
dotnet new blazorwasm --hosted -o <ソリューション名>
ソリューションフォルダ下に下記プロジェクトフォルダが作成される。
- Client-blazor wasm プロジェクト
- Server-asp.netプロジェクト
- Shared-共通DLLプロジェクト
ClientプロジェクトにはSharedプロジェクトの参照が含まれ、ServerプロジェクトにはSharedプロジェクトとClientプロジェクトの参照が含まれる。つまり、共通クラスやInterface等はSharedプロジェクトに定義しておけば、Client/Server双方から参照出来るようになっている。
ServerプロジェクトにHUB本体を作成し、HubのEndpoint定義をして、ClientプロジェクトにSignalRクライアントライブラリを追加し、
dotnet add Client package Microsoft.AspNetCore.SignalR.Client
下記要領でHubに接続するコードを書くことで、ServerのHubに接続できるようになる。
private HubConnection con;
・・・
con = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/[ハブのエンドポイント]"))
.Build();
・・・
// 接続
await con.StartAsync();
後はServerプロジェクトを起動して、ブラウザからアクセスするだけ。
もちろん、blazor server side版やWindows FormsなどからもこのHubに接続できる。
詳しくは、MSのサイト「Blazor WebAssembly で ASP.NET Core SignalR を使用する」をどうぞ。
正式リリース版では是非とも、既存サイトのHUBに接続できるようになって欲しいな。