Я установил ядро .net веб-сайта signalR. Моя функция в моем хабе:
public async Task Notify(int id) {
await Clients.All.InvokeAsync("Notified", id);
}
Я также тестировал это с помощью следующих js:
let connection = new signalR.HubConnection(myURL);
connection.on('Notified', data => {
console.log(4, data);
});
connection.start();
Код js работает нормально, и я вижу журнал, когда пытаюсь connection.Invoke('Notify')
.
Теперь у меня есть консольное приложение, которое может вызывать. Я пытаюсь сделать это двумя способами и не возражаю против любого из решений: 1. Контроллер mvc на веб-сайте signalR, который может принимать идентификатор и вызывать 'Notified'. 2. Используйте клиентскую библиотеку Microsoft.AspNetCore.SignalR.Client
в консольном приложении.
Способ 1, который я сделал только в классическом asp.net, вот так:
GlobalHost.ConnectionManager.GetHubContext(hubName)
Но не смог найти способ сделать это в ядре .net.
Способ 2 Я использовал библиотеку и пробовал это до сих пор:
var con = new HubConnectionBuilder();
con.WithUrl(myURL);
var connection = con.Build();
connection.InvokeAsync("Notify",args[0]).Wait();
Я подошел ближе всего к созданию соединения таким же образом, как и в js-коде. Однако этот код выдает нулевой указатель при вызове connection.InvokeAsync
. Объект connection
не равен нулю. Кажется, это внутренний объект с нулевым значением. Согласно трассировке стека, исключение выдается при внутреннем вызове функции MoveNext ().