development

Hubpipleline 외부에서 SignalR 허브 인스턴스를 사용하는 방법

big-blog 2020. 10. 12. 07:49
반응형

Hubpipleline 외부에서 SignalR 허브 인스턴스를 사용하는 방법


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에 자세히 설명되어 있습니다 .


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 메시지 보내기 .

참고 URL : https://stackoverflow.com/questions/15128125/how-to-use-signalr-hub-instance-outside-of-the-hubpipleline

반응형