なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

SignalR のリアルタイム通信で 32KB 以上のパラメータを受信したい

ASP.NET Core 版の WebSocket 実装である SignalR では、 C# 側で実装したメソッドを、 JavaScript フロントエンドから呼び出すことができます。 その際、例えばバイナリの Base64 String を送るなどでパラメータサイズが 32KB を超える場合、以下のようなエラーが発生します。

The maximum message size of 32768B was exceeded. The message size can be configured in AddHubOptions.
   at Microsoft.AspNetCore.SignalR.HubConnectionHandler`1.DispatchMessagesAsync(HubConnectionContext connection)
   at Microsoft.AspNetCore.SignalR.HubConnectionHandler`1.RunHubAsync(HubConnectionContext connection)

このようなエラーが出てしまったときは、エラーメッセージにあるとおりオプションを設定することで、許容できる受信サイズを上げることができます。 ASP.NET Core なら、 Startup.cs にて、以下のような記述をすることで上げることができます:

using Microsoft.Extensions.DependencyInjection;

private void ConfigureServices(IServiceCollection services) {
    // ...
   services.AddSignalR(options => {
       options.MaximumReceiveMessageSize = 10 * 1024 * 1024; // 10MiB
   });
}

Microsoft Learn にあるとおり、デフォルトサイズは 32KB なので、 32KB を超えるメッセージを受信する予定がある場合は、設定しておきましょう。

learn.microsoft.com