所以这是第二次发生了。我相信触发错误的原因是我尝试对MongoDb服务器进行更新时,但我仍然不知道为什么会发生这种情况,我想找出答案。
基本上,我正在使用Signalr使用以下命令将C#脚本中的json字符串数据发送到前端:
_hubContext.Clients.All.SendAsync("ReceiveMail", json);
问题是我的脚本继续广播此消息(没有任何错误或问题),但是我的客户端没有收到该消息(即使此广播已工作了数周……)。当我将广播的名称更改为其他名称时,数据将完美地传递到客户端。
示例:
//This broadcast worked fine for weeks but suddenly stopped working (without error)
_hubContext.Clients.All.SendAsync("ReceiveMail", json);
//Changed above broadcast to this and broadcast works perfectly fine again
_hubContext.Clients.All.SendAsync("ListenForMail", json);
TS代码:
constructor() {
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl('http://localhost:57697/chat')
.build();
this.hubConnection
.start()
.then(() => this.table())
.catch(err => console.log('Error while establishing connection :('));
this.hubConnection.on('ReceiveMail', (mailJson: string) => {
this.loadEmail(mailJson);
});
this.hubConnection.on('ReceiveConnection', (msg: string) => {
console.log('Connection: ' + msg);
});
}
有人对此问题有见识吗?
答案 0 :(得分:1)
C#代码正在调用的方法名称与您在TS代码中正在侦听的方法不匹配-但我认为这是一个错字。如果不是,那么您需要确保.on
方法使用与C#代码相同的方法名称。
您还需要更改的另一件事是在哪里开始连接E.G。
constructor() {
this.hubConnection = new signalR.HubConnectionBuilder()
.withUrl('http://localhost:57697/chat')
.build();
this.hubConnection.on('RetrieveMail', (mailJson: string) => {
this.loadEmail(mailJson);
});
this.hubConnection.on('ReceiveConnection', (msg: string) => {
console.log('Connection: ' + msg);
});
this.hubConnection
.start()
.then(() => this.table())
.catch(err => console.log('Error while establishing connection :('));
}
在上面的代码中,我将.start()
调用转移到注册on
方法之后。您应该采用这种方式,因为hubconnection
可以在注册处理程序之前引起争用条件之前开始侦听消息。如果on
处理程序尚未完成注册,则不会接收任何发送的消息。