signalr

ASP.NET Core SignalR implementation for real-time client-server communication. Sorcha uses two hubs: ActionsHub (Blueprint Service) for workflow notifications and RegisterHub (Register Service) for ledger events. Both use group-based broadcasting with JWT authentication via query parameters.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "signalr" with this command: npx skills add stuartf303/sorcha/stuartf303-sorcha-signalr

SignalR Skill

ASP.NET Core SignalR implementation for real-time client-server communication. Sorcha uses two hubs: ActionsHub (Blueprint Service) for workflow notifications and RegisterHub (Register Service) for ledger events. Both use group-based broadcasting with JWT authentication via query parameters.

Quick Start

Hub Implementation

// Strongly-typed hub with client interface public class RegisterHub : Hub<IRegisterHubClient> { public async Task SubscribeToRegister(string registerId) { await Groups.AddToGroupAsync(Context.ConnectionId, $"register:{registerId}"); } }

public interface IRegisterHubClient { Task RegisterCreated(string registerId, string name); Task TransactionConfirmed(string registerId, string transactionId); }

Sending from Services

public class NotificationService { private readonly IHubContext<ActionsHub> _hubContext;

public async Task NotifyActionConfirmedAsync(ActionNotification notification, CancellationToken ct)
{
    await _hubContext.Clients
        .Group($"wallet:{notification.WalletAddress}")
        .SendAsync("ActionConfirmed", notification, ct);
}

}

Client Connection (Testing)

var connection = new HubConnectionBuilder() .WithUrl($"{baseUrl}/actionshub?access_token={jwt}") .Build();

connection.On<ActionNotification>("ActionConfirmed", notification => { /* handle */ }); await connection.StartAsync(); await connection.InvokeAsync("SubscribeToWallet", walletAddress);

Key Concepts

Concept Usage Example

Groups Route messages to subscribers wallet:{address} , register:{id} , tenant:{id}

Typed Hubs Compile-time safety Hub<IRegisterHubClient>

IHubContext Send from services Inject IHubContext<THub>

JWT Auth Query parameter auth ?access_token={jwt}

Common Patterns

Service Abstraction Over Hub

When: Decoupling business logic from SignalR implementation

// Interface in Services/Interfaces/ public interface INotificationService { Task NotifyActionAvailableAsync(ActionNotification notification, CancellationToken ct = default); }

// Register in DI builder.Services.AddScoped<INotificationService, NotificationService>();

Hub Registration in Program.cs

builder.Services.AddSignalR();

// Map after authentication middleware app.MapHub<ActionsHub>("/actionshub"); app.MapHub<RegisterHub>("/hubs/register");

See Also

  • patterns - Hub patterns, group routing, typed clients

  • workflows - Testing, scaling, authentication setup

Related Skills

  • aspire - Service orchestration and configuration

  • jwt - Authentication token setup for hub connections

  • redis - Backplane configuration for scaling

  • xunit - Integration testing patterns

  • fluent-assertions - Test assertions for hub tests

Documentation Resources

Fetch latest SignalR documentation with Context7.

How to use Context7:

  • Use mcp__context7__resolve-library-id to search for "signalr aspnetcore"

  • Prefer website documentation (IDs starting with /websites/ ) over source code

  • Query with mcp__context7__query-docs using the resolved library ID

Library ID: /websites/learn_microsoft_en-us_aspnet_core (ASP.NET Core docs including SignalR)

Recommended Queries:

  • "SignalR hub groups authentication"

  • "SignalR Redis backplane scaling"

  • "SignalR strongly typed hubs"

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

sorcha-cli

No summary provided by upstream source.

Repository SourceNeeds Review
General

entity-framework

No summary provided by upstream source.

Repository SourceNeeds Review
General

scalar

No summary provided by upstream source.

Repository SourceNeeds Review