blazor wasm版でSignalRを使用する場合に注意しなくてはならない事。
wasm版はバックエンドとしてブラウザのhttp送受信機能を使用するので、HUB側とドメインが異なる場合にHUB側でCORS設定をしておかないとHubConnection.StartAsyncを呼び出した時点で実行時エラーとなる。
どうやら、ヘッダに関しての物らしく、以下のようにAllowAnyHeader()を追加したところ、接続が完了し、クライアント側が正常に動作するようになった。(Originだけではエラー回避できない)
services.AddCors(options => {
options.AddPolicy("AllowAnyHostsPolicy",
builder => {
builder.WithOrigins(・・・)
.AllowAnyHeader();
});
});
動かない理由を把握するの少々手こずったので、メモ。




Users Today : 4
Users Yesterday : 47
Users Last 7 days : 280
Users Last 30 days : 905
Users This Month : 577
Users This Year : 5691
Total Users : 100206
Views Today : 5
Views Yesterday : 51
Views Last 7 days : 326
Views Last 30 days : 1064
Views This Month : 662
Views This Year : 6826
Total views : 139272
Who's Online : 0
localhostポート違いだと上記で動作したんだけど、ホスト名を指定したら、何故かStartAsyncが完了しない・・・
NETトレースをとってみたが、TCPレベルでは普通に接続している様子。
SignalRプロトコルのハンドシェークに問題があるのかな?
やっぱり、現状blazor wasmではhostedプロジェクトじゃないと動作しないみたいだね。
dotnet new blazorwasm -o <ソリューション> -hosted
これで、Server/Client/Sharedの3プロジェクトが作成される。
既存の他ホストのHubに接続することはできないみたいだ。
これは、正式リリース時には解決されるのかな?