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






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