J'utilise SignalR pour diffuser des messages à tous mes clients. Je dois déclencher la diffusion en dehors de ma classe de concentrateur, c'est-à-dire quelque chose comme ci-dessous:
var broadcast = new chatHub(); broadcast.Send("Admin","stop the chat");
Je reçois un message d'erreur comme:
L'utilisation d'une instance Hub non créée par HubPipeline n'est pas prise en charge.
Vous devez utiliser GetHubContext
:
var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
context.Clients.All.Send("Admin", "stop the chat");
Ceci est décrit plus en détail à http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#callfromoutsidehub .
Une petite mise à jour pour ceux qui pourraient se demander où est passé le GlobalHost
. SignalR a été complètement réécrit pour le noyau .net. Donc, si vous utilisez le package SignalR.Core ( Différence entre les versions de SignalR ), vous obtenez une instance du contexte du concentrateur SignalR en l'injectant dans votre service:
public class MyNeedyService
{
private readonly IHubContext<MyHub> ctx;
public MyNeedyService(IHubContext<MyHub> ctx)
{
this.ctx = ctx;
}
public async Task MyMethod()
{
await this.ctx.All.SendAsync("clientCall");
}
}
Et en Startup.cs
:
services.AddSignalR()/*.AddAzureSignalR("...")*/;
Microsoft docu est ici: Envoyer des messages SignalR depuis l'extérieur du hub .