我需要一些帮助,以了解他们是否对signalR做错了。放手:
我的应用程序是mvc。我按照教程的示例进行操作,
我创建了一个RealTime类:
public class RealTime : Hub
{
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("ReceiveMessage", message);
}
}
在启动中:
public void ConfigureServices(IServiceCollection services)
{
.
.
.
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime)
{
.
.
.
app.UseSignalR(routes =>
{
routes.MapHub<RealTime>("/realtime");
});
}
因此,我去了控制器并注入了IHubContext:
public class MyController : Controller
{
private readonly IHubContext<RealTime> _hub;
public MyController
(
IHubContext<RealTime> hub
)
{
_hub = hub;
}
在某些时候我使用:
await _hub.Clients.All.SendAsync("ReceiveMessage", "Hello Word!");
在前端,我执行了以下操作:
var connection = new signalR.HubConnectionBuilder().withUrl("/realtime").build();
connection.on("ReceiveMessage", function (message) {
Swal.fire(
'The Internet?',
message,
'question'
);
});
connection.start().then(function () {
//
}).catch(function (err) {
//
});
但是什么也没发生。后端或前端均无错误。但是什么也没发生!
谁能告诉我我做错了什么?
答案 0 :(得分:0)
我注意到的第一件事是,您将集线器注入了Controller中,尝试将其注入到该Controller中被调用的服务/管理器中。
第二件事是,当您不在实现Hub的类中时,最好与SendCoreAsync()
而不是SendAsync
一起使用。
我建议您做的第三件事是将.configureLogging(signalR.LogLevel.Information) and then .build();
另外,请确保此操作不会出错:import * as signalR from "@aspnet/signalr";
同时启动连接并显示一条消息,以了解是否已建立连接
connection.start().then(function () {
console.log("signalR connected")
}).catch(function (err) {
console.log(err)
});
只有在开始连接后,我才将连接打开。
connection.on("ReceiveMessage", (message) =>{
Swal.fire(
'The Internet?',
message,
'question'
);
});
希望我能帮助您!
答案 1 :(得分:0)
感谢您的帮助。我找到了解决方案,尽管很难看。
在打开连接之前,我放了以下代码段:
Object.defineProperty(WebSocket, 'OPEN', { value: 1, });
所以我的js是这样的:
var connection = new signalR.HubConnectionBuilder()
.withUrl("/realtime")
.configureLogging(signalR.LogLevel.Debug)
.build();
Object.defineProperty(WebSocket, 'OPEN', { value: 1, });
connection.start().then(function () {
console.log("signalR connected")
}).catch(function (err) {
return console.error(err)
});
connection.on("ReceiveMessage", function (message) {
Swal.fire(
'The Internet?',
message,
'question'
);
});