blazor wasmとSignalR

blazor wasm版でSignalRを使用する場合に注意しなくてはならない事。
wasm版はバックエンドとしてブラウザのhttp送受信機能を使用するので、HUB側とドメインが異なる場合にHUB側でCORS設定をしておかないとHubConnection.StartAsyncを呼び出した時点で実行時エラーとなる。

どうやら、ヘッダに関しての物らしく、以下のようにAllowAnyHeader()を追加したところ、接続が完了し、クライアント側が正常に動作するようになった。(Originだけではエラー回避できない)

            services.AddCors(options => {
                options.AddPolicy("AllowAnyHostsPolicy",
                    builder => {
                        builder.WithOrigins(・・・)
                        .AllowAnyHeader();
                    });
            });

動かない理由を把握するの少々手こずったので、メモ。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。
カテゴリー: asp.net core, Blazor, C#, dotnetcore, SignalR, 技術系 パーマリンク

3 Responses to blazor wasmとSignalR

  1. takezou のコメント:

    localhostポート違いだと上記で動作したんだけど、ホスト名を指定したら、何故かStartAsyncが完了しない・・・

  2. takezou のコメント:

    NETトレースをとってみたが、TCPレベルでは普通に接続している様子。
    SignalRプロトコルのハンドシェークに問題があるのかな?

  3. takezou のコメント:

    やっぱり、現状blazor wasmではhostedプロジェクトじゃないと動作しないみたいだね。
    dotnet new blazorwasm -o <ソリューション> -hosted
    これで、Server/Client/Sharedの3プロジェクトが作成される。

    既存の他ホストのHubに接続することはできないみたいだ。
    これは、正式リリース時には解決されるのかな?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください