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






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