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





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