无法在信号器中调用 javascript 客户端方法
Can't call javascript client method in signalr
以下代码在 IIS Express 中工作正常,但在 IIS10 中失败。
奇怪的是服务器端方法可以调用成功,但是客户端方法不能。
JavaScript
var hub = $.connection.liveRoomHub;
hub.client.addMessageToPage = function(data){
debugger;//here, this method never gets invoked
console.log(JSON.stringify(data));
};
$.connection.hub.start()
.done(function() {
hub.server.join('room1')
.done(function(){
debugger; //code can run into here
hub.server.sendMessage('user','test','room1');
})
});
C#
public class LiveRoomHub : Microsoft.AspNet.SignalR.Hub
{
public ILogger Logger { get; set; }
public async Task SendMessage(string name, string message, string roomName)
{
await Clients.Group(roomName)
.addMessageToPage(new
{
Name = name,
Message = message
});
Logger.Info($"{name}send msg:{message}in room:{roomName},");//logged
}
public async Task Join(string roomName)
{
await Groups.Add(Context.ConnectionId, roomName);
Logger.Info($"{Context.ConnectionId} enter room: {roomName}");//logged
}
}
好的,问题解决了。
我正在使用 aspnetboilerplate,abp.signalr.js
在加载我的 JavaScript 代码之前自动调用集线器连接。
显然,那个时候我的hub.client.addMessageToPage
还没有注册
这是常见的 Connection started before subscriptions are added
错误。
以下代码在 IIS Express 中工作正常,但在 IIS10 中失败。
奇怪的是服务器端方法可以调用成功,但是客户端方法不能。
JavaScript
var hub = $.connection.liveRoomHub;
hub.client.addMessageToPage = function(data){
debugger;//here, this method never gets invoked
console.log(JSON.stringify(data));
};
$.connection.hub.start()
.done(function() {
hub.server.join('room1')
.done(function(){
debugger; //code can run into here
hub.server.sendMessage('user','test','room1');
})
});
C#
public class LiveRoomHub : Microsoft.AspNet.SignalR.Hub
{
public ILogger Logger { get; set; }
public async Task SendMessage(string name, string message, string roomName)
{
await Clients.Group(roomName)
.addMessageToPage(new
{
Name = name,
Message = message
});
Logger.Info($"{name}send msg:{message}in room:{roomName},");//logged
}
public async Task Join(string roomName)
{
await Groups.Add(Context.ConnectionId, roomName);
Logger.Info($"{Context.ConnectionId} enter room: {roomName}");//logged
}
}
好的,问题解决了。
我正在使用 aspnetboilerplate,abp.signalr.js
在加载我的 JavaScript 代码之前自动调用集线器连接。
显然,那个时候我的hub.client.addMessageToPage
还没有注册
这是常见的 Connection started before subscriptions are added
错误。