我已经建立了一个signalR网站.net核心。我在中心的功能是:
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. signalR 网站中的 mvc 控制器,它可以获取 id 并调用“通知”。Microsoft.AspNetCore.SignalR.Client
2.在控制台应用程序中使用客户端库。
方式1我只在经典的 asp.net 中这样做过:
GlobalHost.ConnectionManager.GetHubContext(hubName)
但是在.net core中找不到这样做的方法。
方式2我已经使用了该库并尝试了这个到目前为止:
var con = new HubConnectionBuilder();
con.WithUrl(myURL);
var connection = con.Build();
connection.InvokeAsync("Notify",args[0]).Wait();
这是我以与 js 代码相同的方式创建连接的最接近的方法。但是,此代码在调用connection.InvokeAsync
. connection
对象不为空。它似乎是一个为空的内部对象。根据堆栈跟踪,当内部调用 MoveNext() 函数时会引发异常。