Я установил концентратор 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 ("Перехват", "Тест")
, но я не могу заставить его работать.
Любая помощь в этом будет принята с благодарностью
Это изменилось в.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;
}