Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Configured hub URL not used for Blazor server + SignalR hub

$
0
0

In .NET 9 I've created a default Blazor Web app project and added a SignalR hub that is used for sending notifications between clients.

When one session increments the value for /counter, all sessions are notified of this and updates their displayed value. This all works.

What I don't understand is why in the browser developer tools, there's no connection to the configured Hub URL. There is only the standard Blazor server websocket to /_blazor.

The code-behind for Counter.razor is updated like this:

<PageTitle>Counter</PageTitle><h1>Counter</h1><p role="status">Current count: @currentCount</p><button class="btn btn-primary" @onclick="IncrementCount">Click me</button>@code {    private int currentCount = 0;    private HubConnection _hubConnection;    public async ValueTask DisposeAsync()    {        await _hubConnection.DisposeAsync();    }    protected override async Task OnInitializedAsync()    {        _hubConnection = new HubConnectionBuilder()            .WithUrl(NavigationManager.ToAbsoluteUri(CounterHub.HubUrl))            .Build();        _hubConnection.On<CounterNotification>(CounterHub.CounterUpdatedMethod, HandleCounterUpdated);        await _hubConnection.StartAsync();    }    private void HandleCounterUpdated(CounterNotification notification)    {        currentCount = notification.Counter;        InvokeAsync(StateHasChanged);    }    private async Task IncrementCount()    {        await CounterHubContext.Clients.All.SendAsync(CounterHub.CounterUpdatedMethod, new CounterNotification(currentCount + 1));    }}

CounterHub.cs is implemented like this:

public class CounterHub : Hub{    public const string HubUrl = "/counter-notifications";    public const string CounterUpdatedMethod = "CounterUpdated";    public override Task OnConnectedAsync()    {        Console.WriteLine("{0} connected", Context.ConnectionId);        return base.OnConnectedAsync();    }    public override async Task OnDisconnectedAsync(Exception? e)    {        Console.WriteLine("{0} disconnected", Context.ConnectionId);        await base.OnDisconnectedAsync(e);    }}

CounterNotification.cs looks like this:

public record CounterNotification(int Counter){    public CounterNotification() : this(0) { }}

It's all hooked up in Program.cs with the additions of these lines:

builder.Services.AddSignalR();builder.Services.AddResponseCompression(opts =>{    opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(        ["application/octet-stream"]);});app.UseResponseCompression();app.MapHub<CounterHub>(CounterHub.HubUrl);

With this, I would expect to see a websocket open up to /counter-notifications. But there's nothing. What's going on? Is the default Blazor websocket connection reused for the custom SignalR?

Firefox developer tools showing only one websocket connection


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>