Вызов клиентов концентратора SignalR из другого места в системе

Я установил концентратор SignalR для связи между сервером и клиентом. Код на стороне хаб-сервера хранится в классе Hooking.cs. Я хочу иметь возможность вызывать метод, определенный в Hooking.cs, чтобы я мог транслировать сообщения любым подключенным клиентам из любого места в моем приложении. Кажется, что новый экземпляр Hooking.cs создается для каждого вызова клиент / сервер, поэтому я надеялся, что смогу использовать что-то вроде

var hooking = new Hooking();
hooking.Test();

с методом Test (), определенным в Hooking.cs, например

public static void Test() {
    Clients.test()
}

и с javascript на стороне клиента

var hooking = $.connection.hooking;
hooking.test = function() { alert("test worked"); };
$.connection.hub.start()

К сожалению, это не так просто, поскольку клиенты не статичны и недоступны из статических методов.

Просматривая исходный код SignalR, я наткнулся на многообещающий метод Hubs.Invoke (string hubName, string method, params object [] args) , поэтому я надеюсь, что смогу использовать что-то подобное как Hubs.Invoke ("Перехват", "Тест") , но я не могу заставить его работать.

Любая помощь в этом будет принята с благодарностью

72
задан Leniel Maccaferri 29 July 2012 в 07:55
поделиться

1 ответ

Это изменилось в.NET Core 2, теперь можно использовать внедрение зависимости как это:

    private readonly IHubContext<MyHub,IMyHubInterface> _hubContext;

    public MyController(MyHub,IMyHubInterface hubContext)
    {
        _hubContext = hubContext;
    }

    public bool SendViaSignalR()
    {
        _hubContext.Clients.All.MyClientSideSignalRMethod(new MyModel());
        return true;
    }
0
ответ дан 24 November 2019 в 12:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: