Skip to main content
Version: Latest
Technical Manual

SignalR Feature

Feature NameSignalR
Feature IDOrchardCore.SignalR
Deprecated compatibility feature IDCrestApps.OrchardCore.SignalR
Redis backplane feature IDOrchardCore.SignalR.Redis
Azure backplane feature IDOrchardCore.SignalR.Azure

The SignalR module has been migrated into the Orchard Core framework. Use OrchardCore.SignalR and the framework signalr script resource for new work. The deprecated CrestApps feature only exists as a compatibility feature for sites that still need migration.

Contact Center distributed topologies

The Contact Center topology check looks for the deprecated CrestApps.OrchardCore.SignalR.Redis feature ID when a topology profile needs a Redis backplane, such as single-node-distributed. Enable that compatibility feature (it turns on OrchardCore.SignalR.Redis) on those sites. See Production support.

CrestApps hub helpers​

SignalRHubRoutes and Html.SignalRHubUrl<T>() are not part of the Orchard Core SignalR module. They ship in CrestApps.OrchardCore.Core and are the routing convention the CrestApps hubs follow, so a module that references that package gets them whichever SignalR feature is enabled.

SignalRHubRoutes.GetHubPath<T>() returns /Communication/Hub/{HubTypeName}. Views that need the client URL use Html.SignalRHubUrl<T>(), which adds the current request path base so hub links work for tenants served under a URL prefix.

public override void Configure(IApplicationBuilder app, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)
{
routes.MapHub<MyHub>(SignalRHubRoutes.GetHubPath<MyHub>());
}
@{
var hubUrl = Html.SignalRHubUrl<MyHub>();
}

<script asp-name="my-script" depends-on="signalr" at="Foot"></script>

Multi-tenant destinations​

A SignalR backplane is shared infrastructure, while Orchard user identifiers and application group names are tenant-local. Do not send tenant data through an unqualified Clients.User(userId) or a globally named group.

TenantSignalRGroupName (in CrestApps.OrchardCore.SignalR.Core) qualifies both: TenantSignalRGroupName.ForUser(shellName, userId) for user destinations and TenantSignalRGroupName.ForGroup(shellName, logicalGroupName) for application groups. The hub adds only authorized connections to the qualified group, and publishers target the same generated name, so equal user or group identifiers in different shells stay isolated on single-node and backplane deployments alike.

Learn more in the Orchard Core SignalR documentation.