'SignalR: Websocket closed with error: InternalServerError

On the front side when the user adds a new mp3. In addition to writing this to the database, I also need to transfer that mp3 to the client side. But my client side is Worker Service. I need to transfer this mp3 to that Worker Service via SignalR.

My SignalR server project codes :

Startup hub endpoint :

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action}/{id?}");

                endpoints.MapHub<TrackHub>("/hubs/track");
            });

Hub :

 public class TrackHub : Hub
{
    public static Dictionary<int, string> ActiveUsers = new Dictionary<int, string>();

    public TrackHub()
    {
    }

    public async Task SendMessage(string message)
    {
        var connectionId = Context.ConnectionId;
        await Clients.Others.SendAsync("ReceiveMessage", message + connectionId);
    }

    public override async Task OnConnectedAsync()
    {
        await Clients.All.SendAsync("ActiveUsers");
    }

    public override async Task OnDisconnectedAsync(Exception exception)
    {
        await Clients.All.SendAsync("ActiveUsers");
    }
}

HubContext

 public class TrackBusiness
{
    private readonly IHubContext<TrackHub> _hubContext;

    public TrackBusiness(IHubContext<TrackHub> hubContext)
    {
        _hubContext = hubContext;
    }
    public Task SendMessage()
    {
        return _hubContext.Clients.All.SendAsync("Receive");
    }
}

And my client side - worker service project :

  public class SocketService : ISocketService
{
    private HubConnection? _connection;
    private readonly IConfiguration _configuration;
    private readonly ILogger<SocketService> _logger;

    public event OnNewTrackAddedEventHandler NewTrackAdded;
    public event OnDeviceDeletedEventHandler DeviceDeleted;

    public SocketService(IConfiguration configuration, ILogger<SocketService> logger)
    {
        _configuration = configuration;
        _logger = logger;
    }

    public async Task Start()
    {
        _connection = new HubConnectionBuilder()
            .WithUrl(_configuration.GetValue<string>("SocketUrl"))
            .WithAutomaticReconnect(new[] { TimeSpan.Zero, TimeSpan.Zero, TimeSpan.FromSeconds(10) })
            .Build();

        _connection.Reconnected += connectionId =>
        {
            if (_connection.State == HubConnectionState.Connected)
            {
                _logger.LogInformation("Socket reconnected");
            }

            if (_connection.State == HubConnectionState.Reconnecting)
            {
                _logger.LogInformation("Socket try to reconnect");
            }

            return Task.CompletedTask;
        };

        _connection.On<string, byte[]>("SendMessage", (imei, track) =>
        {
            NewTrackAdded.Invoke(imei, track);
        });

        _connection.On<string>("DeviceDeleted", (imei) =>
        {
            DeviceDeleted.Invoke(imei);
        });

        try
        {
            await _connection.StartAsync();
            _logger.LogInformation("Socket started");
        }
        catch (Exception e)
        {
            _logger.LogWarning("Socket can't connect : {0}", e.Message);
        }
    }
}

My appSettings :

 {
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ApiUrl": "localhost",
  "SocketUrl": "http://localhost:29082/hubs/track"
}

But I run into this error when I start the project. Can you help with the problem?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source