#SignalR
An MCP server with SignalR in it. Stephen Halter's demo calls AddMcpServer().WithMcpApps() next to AddSignalR(), so every tool call also lights up a second screen live.

I love seeing SignalR here. Go deeper: signalrmastery.com

@dot.net #dotnetconf #signalr
November 11, 2026 at 7:17 PM
Securing a remote MCP server in C# looks like any ASP.NET Core endpoint: MapMcp().RequireAuthorization(), JWT bearer, Entra sign-in.

Tools get a ClaimsPrincipal with the user's roles, and the agent never holds the tokens.

@dot.net #dotnetconf #csharp
November 11, 2026 at 7:33 PM
Finally, CSRF protection without antiforgery tokens.

ASP.NET Core 11 reads the browser's Fetch Metadata headers and rejects cross-origin posts on its own. @danroth27.bsky.social showed it live. #dotnetconf @dot.net
November 10, 2026 at 4:40 PM
centrifugo by @centrifugalabs (⭐️ 10954)

Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably, socket.io, Phoenix.PubSub, SignalR...

#go
November 7, 2026 at 10:38 PM
More of an email kind of guy or gal? Subscribe to the weekly ASP .NET Core newsletter on aspnetcore.news.
ASP.NET Core News - Your weekly update of everything ASP.NET Core
ASP.NET Core News is the only weekly newsletter dedicated to ASP.NET Core. Whether you build Razor Pages, MVC applications, Web APIs, Blazor, SignalR awesomeness, or anything else available on the ASP.NET...
aspnetcore.news
November 12, 2026 at 1:00 PM
Stale permissions on a long-lived Blazor Server circuit, handled.

An admin revoked a user's permission and the open page picked it up on the next token refresh. Same SignalR connection, no reconnect, form data kept. New in .NET 11. #dotnetconf @dot.net
November 10, 2026 at 6:04 PM
微软宣布 .NET 11

微软宣布了 .NET 11。该版本是标准支持版本 STS,提供两年支持,上个版本 .NET 10 则是长期支持版本 LTS。.NET 11 改进 C# 15、ASP.NET Core、.NET MAUI 以及 Windows,缩短了应用构建时间,主要变化包括:C# 15 引入了联合类型和封闭类层次结构;Native AOT CLI;ASP.NET Core 支持异步验证和 OpenAPI 3.2,以及 Blazor 和 SignalR 应用的新功能;等等。
November 10, 2026 at 6:30 PM
centrifugo by @centrifugalabs (⭐️ 10948)

Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably, socket.io, Phoenix.PubSub, SignalR...

#go
November 5, 2026 at 9:45 PM
Friday is for reading ASP .NET Core blog posts! Subscribe to our weekly newsletter here: aspnetcore.news.
ASP.NET Core News - Your weekly update of everything ASP.NET Core
ASP.NET Core News is the only weekly newsletter dedicated to ASP.NET Core. Whether you build Razor Pages, MVC applications, Web APIs, Blazor, SignalR awesomeness, or anything else available on the ASP.NET...
aspnetcore.news
November 5, 2026 at 1:00 PM
SignalR no .NET exige pensar além do Hub: reconexão, autorização, grupos e escala. O maior erro é tratar mensagens em tempo real como estado durável. https://zocate.li/posts/2026/signalr-aspnet-core-guia/?utm_source=bluesky&utm_medium=social&utm_campaign=blog-2026
SignalR no .NET: do primeiro Hub à produção
Guia de SignalR no .NET 10: Hubs, cliente Angular, autorização, reconexão, grupos e escala sem tratar notificações como estado durável.
zocate.li
November 2, 2026 at 5:30 PM
💡 Copilot Studio can help troubleshoot real-world devices too!

Ed Williams shows how IoT devices, Azure IoT Hub, Event Hub, Azure Functions, SignalR, Power Pages, Dataverse, and #CopilotStudio can guide device troubleshooting.

📺 Watch now → youtu.be/_19ZmbVi6WQ
November 1, 2026 at 11:13 AM
Who owns the clock? Lessons from building a live multiplayer game in Blazor and SignalR
I build business software on the Microsoft stack for a living. This year I built something different: My Event Bingo, a live bingo game for meetings, presentations and watch parties. A host writes 25 squares from the things that will happen at the event ("someone says synergy", "the dog walks into frame"). Everyone joins from a link or QR code and gets their own shuffled 5x5 card. There is no number caller; the event does the calling. It runs on .NET 10. One Razor Class Library of about 200 components serves both the website (a Blazor Web App) and a .NET MAUI Blazor Hybrid app for iPhone, Android and Windows. SignalR carries everything live: marks, chat, polls, game start, game over. Here is what a live multiplayer game taught me that CRUD apps never did. ## 1. The server owns the lifecycle. Clients only mirror it. Early on, each client worked out for itself whether the game had started, whether someone had won, whether it was over. That is a recipe for two phones showing two different truths. Now there is one enum, derived on the server and pushed out: public enum GameLifecycle { NotStarted, // before StartTime; the host can still edit squares Started, // StartTime crossed, this player hasn't marked anything yet InProgress, // at least one square marked WonByMe, // this player holds a line; the game continues for everyone else Paused, // host paused; marking is blocked, chat still works Ended // winner limit reached, time limit reached, or host finished it } Every transition has a SignalR event. A client may compute the phase locally only on a cold start, before the first push arrives. After that, the server is the source of truth. When a rule changes, it changes in one place. ## 2. Nobody clicks at 7:00 PM. Something on the server has to. A game has a start time. At that moment the Join button needs to light up on every waiting phone, even if nobody touches anything. My first version only noticed the start time when a request came in. Visitors sat on a welcome card with a dead button. The fix is a hosted service, a `BackgroundService` with a `PeriodicTimer`: // Simplified public sealed class GameLifecycleScheduler : BackgroundService { private static readonly TimeSpan TickInterval = TimeSpan.FromSeconds(15); protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var timer = new PeriodicTimer(TickInterval); while (await timer.WaitForNextTickAsync(stoppingToken)) { // 1. Only look at games that have someone connected right now. // 2. StartTime crossed and not yet announced -> send "game started". // 3. StartTime + 24h crossed -> mark the game ended, then send "game over". } } } Three details turned out to matter: * **Filter on live sessions, not database rows.** A brand-new game has zero player rows but plenty of connected visitors, and those visitors are exactly who needs the push. * **Dedupe "started" on delivery, not on attempt.** If the push reached nobody, retry on the next tick for a short window. A duplicate start is harmless because the client handler is idempotent. A missed start is the bug you are trying to fix. * **Dedupe "ended" in the database.** Flip `IsEnded = true` before broadcasting. Whichever transaction commits first wins, and the scheduler and a last-second square tap can't both end the game. Fifteen seconds is the worst-case delay a player can feel, and it costs two narrow indexed queries per tick. ## 3. A visitor is not a player until they say so My original page load did two things at once: it fetched the game and generated the visitor's card. A GET that writes. Anyone who opened the link, including a link-preview bot, became a player with a locked card. Now loading the game is read-only, and joining is an explicit `POST /api/bingo/joingame`. It is idempotent: call it twice and you get the same card back, never a second card and never an error. The client also disables the button while the request is in flight, but the server does not rely on that. Rule of thumb I now apply everywhere: if a GET changes state, it will eventually be called by something you didn't expect. ## 4. Two tabs, one player: last in wins People open the game link in a second tab or on a second device. If both sessions can mark squares, you get double events and confused boards. A singleton `GameplaySessionRegistry` keys sessions by `UserId|GameId`, gives each registration a monotonic version, and treats the newest one as authoritative. The older session is told it has been superseded, and gameplay commands from it are ignored. It is in-memory and `ConcurrentDictionary`-based. The few read-then-write paths that `ConcurrentDictionary` can't make atomic on its own take a short lock. The same registry answers a question SignalR groups would normally answer: who should get this event? This app routes per connection through the registry instead of using groups, which made it easy to include people who are on the welcome card but haven't joined yet. ## 5. InteractiveAuto means your component boots more than once Gameplay uses the `InteractiveAuto` render mode. A first visit runs on a Server circuit; a returning visit runs on WebAssembly. That is great for load time. It also means a component can prerender, boot on the server, and later boot again in the browser. What helped was sorting state into three buckets: * **Server-authoritative** (the game, players, card, lifecycle, winners): re-fetched on every interactive boot, then kept current by SignalR. Never trusted from a client-side cache. * **UI preferences** (selected tab, mark color): nice to keep, fine to rebuild. * **UI-ephemeral** (animations, unread counts, scroll position): allowed to reset. Once the rule is "server state is always re-fetched, everything else is best-effort", the handoff stops being scary. The other half is guarding JavaScript interop: create the `DotNetObjectReference` once per component instance, dispose it when the component goes away, and make every setup path safe to run twice. Treating "boot" as something that can happen again removed a whole class of ghost-handler bugs. ## 6. Derive winners from the event log, and decide what "first" means Several players can win. Who finished first? I don't store a winners table. Every bingo, and every lost bingo, is already logged as a `GameEvent`, so winners are projected from that log when the game ends. The interesting decision was the timestamp. A player's finish time is the _latest_ moment they went from "no line" to "holding a line". If you make a bingo, un-mark a square, and remake it later, you are timed at the remake. That keeps the ordering fair without recording which squares formed the line. ## What I'd tell anyone starting a real-time Blazor app * Decide early which side owns time, and put a background service behind it. * Make every state-changing call a POST and make it idempotent. * Assume a component will boot twice, and write setup code that is safe to rerun. * Keep the UI library thin. I've been retiring a third-party component suite in favor of small in-house primitives, and every one I replace makes the render-mode handoff easier to reason about. If you want to see it running, start a free game at myeventbingo.com and open it on two phones. Happy to answer questions about the SignalR or MAUI side in the comments.
dev.to
October 30, 2026 at 10:25 PM
Newsletter out tomorrow! Make sure to subscribe on aspnetcore.news to get this week's best blog posts about ASP .NET Core straight in your inbox.
ASP.NET Core News - Your weekly update of everything ASP.NET Core
ASP.NET Core News is the only weekly newsletter dedicated to ASP.NET Core. Whether you build Razor Pages, MVC applications, Web APIs, Blazor, SignalR awesomeness, or anything else available on the ASP.NET...
aspnetcore.news
October 29, 2026 at 1:01 PM
4/6 🚨 401 instead of 302
Cookie auth no longer redirects [ApiController], JSON minimal API, and SignalR endpoints to the login page. The Location header stays; only the status changes.

Need the redirect back? [AllowCookieRedirect]
October 27, 2026 at 6:43 AM
CVE-2026-116110 - GiantappMan LiveWallPaper SignalR Hub UploadFile missing authentication
CVE ID : CVE-2026-116110

Published : Oct. 26, 2026, 3:17 a.m. | 43 minutes ago

Description : A vulnerability was found in GiantappMan LiveWallPaper 2.6.8.0 on Windows. This issue af...
CVE-2026-116110 - GiantappMan LiveWallPaper SignalR Hub UploadFile missing authentication
A vulnerability was found in GiantappMan LiveWallPaper 2.6.8.0 on Windows. This issue affects some unknown processing of the file /LiveWallpaper/UploadFile of the component SignalR Hub. Performing a manipulation results in missing authentication. The attack is possible to be carried out remotely. The exploit has been made public and could be …
cvefeed.io
October 26, 2026 at 4:22 AM
Check your SignalR and Web PubSub resources right now. If public network access is enabled, which is the default, your realtime message plane accepts connections from any network. Keys and tokens are the only boundary.

Learn more at getstratolens.com
October 23, 2026 at 4:00 PM
Newsletter out tomorrow! Make sure to subscribe on aspnetcore.news to get this week's best blog posts about ASP .NET Core straight in your inbox.
ASP.NET Core News - Your weekly update of everything ASP.NET Core
ASP.NET Core News is the only weekly newsletter dedicated to ASP.NET Core. Whether you build Razor Pages, MVC applications, Web APIs, Blazor, SignalR awesomeness, or anything else available on the ASP.NET...
aspnetcore.news
October 22, 2026 at 12:01 PM
centrifugo by @centrifugalabs (⭐️ 10888)

Scalable real-time messaging server in a language-agnostic way. Self-hosted alternative to Pubnub, Pusher, Ably, socket.io, Phoenix.PubSub, SignalR...

#go
October 19, 2026 at 7:02 PM
Did you know that we also send out a newsletter every Friday? Subscribe here: aspnetcore.news.
ASP.NET Core News - Your weekly update of everything ASP.NET Core
ASP.NET Core News is the only weekly newsletter dedicated to ASP.NET Core. Whether you build Razor Pages, MVC applications, Web APIs, Blazor, SignalR awesomeness, or anything else available on the ASP.NET...
aspnetcore.news
October 15, 2026 at 12:01 PM
Don't put client apps on the service bus. Find out how to deal with occasionally connected clients the right way.
Near Real-Time Occasionally-Connected Clients • NServiceBus Samples
How to relay NServiceBus events to occasionally-connected clients via SignalR.
docs.particular.net
October 14, 2026 at 7:12 AM
New capabilities in Wolverine to broadcast messages to all connected clients in a cluster using NATS and more as an addition to our existing SignalR support:

jasperfx.net/news/wolveri...
Broadcasting to Every Node with Wolverine
Most messaging is about one node handling each message, but sometimes every node needs a copy. Here's how to do that with NATS in a Wolverine application, the new BroadcastToAllNodesAsync() in Wolveri...
jasperfx.net
October 14, 2026 at 3:31 PM
SSE vs SignalR in .NET 10
When to use each + simple implementation examples.

If you’re building real-time features in .NET, this may help

tiger4589.github.io/2026/08/01/r...

#dotnet #signalr #sse #aspnetcore #webdev
SSE vs SignalR: choosing the right real-time tool in .NET 10
In modern applications, and for a long time now, real-time communication between clients and servers has been very important. It’s used in streaming, dashboards, notifications, and many more features....
tiger4589.github.io
October 9, 2026 at 12:43 PM