SignalR을 사용하여 모든 클라이언트에게 메시지를 브로드 캐스트하고 있습니다. 내 허브 클래스 외부, 즉 아래와 같은 방송을 트리거해야합니다.
var broadcast = new chatHub();
broadcast.Send("Admin","stop the chat");
다음과 같은 오류 메시지가 나타납니다.
HubPipeline에 의해 생성되지 않은 허브 인스턴스 사용은 지원되지 않습니다.
답변:
다음을 사용해야합니다 GetHubContext
.
var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
context.Clients.All.Send("Admin", "stop the chat");
이에 대해서는 http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#callfromoutsidehub에 자세히 설명되어 있습니다 .
GetHubContext
허브 외부에서 사용하기위한 것이므로 호출자가 없습니다. Clients.All
현재 허브에 연결된 모든 클라이언트를 처리해야합니다.
IHubContext
. 허브 메서드를 호출하는 데 사용할 수 없습니다.
context.Clients.All.broadcastMessage("Admin", "stop the chat");
. 보내기 대신 broadcastMessage를 사용하십시오.
GlobalHost
가 어디로 갔는지 궁금해하는 사람들을위한 작은 업데이트입니다 . SignalR은 .net 코어 용으로 완전히 다시 작성되었습니다. 따라서 SignalR.Core 패키지 ( SignalR 버전 간 차이 )를 사용하는 경우 서비스에 삽입하여 SignalR 허브 컨텍스트의 인스턴스를 가져옵니다.
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");
}
}
그리고 Startup.cs
:
services.AddSignalR()/*.AddAzureSignalR("...")*/;
Microsoft 문서는 다음과 같습니다 . 허브 외부에서 SignalR 메시지 보내기 .