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






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