无法在 OnDisconnected 上调用客户端方法
Not able to call client method on OnDisconnected
我在 TestHub(由 Hub 继承)class 中有一个用于信号 R 的断开连接方法。我无法从 [= 调用 javascript 方法 fnDeleteCustomer
12=] 方法,但是在 Connect 方法上调用相同的 js 方法。我做错了什么?
public override Task OnDisconnected()
{
try
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
if (customer!=null)
{
Clients.Client(customer.ConnectionID).fnDeleteCustomer(customer.UserId);
return base.OnDisconnected();
}
}
catch { };
return null;
}
根据MSDN:
Occurs when a connection disconnects from this hub instance.
因此您没有任何活动连接,您无法访问客户端中心及其方法。
我想你应该使用客户端 disconnected 事件:
$.connection.hub.disconnected(function() {
$.connection.hub.fnDeleteCustomer(userId);
});
可以找到有关信号器生命周期事件的更多信息here。
您无法执行fnDeleteCustomer
,因为在执行OnDisconnected
的那一刻,客户端已经与集线器断开连接,所以在那一刻,客户端将没有ConnectionId
.
当然,您可以使用客户端disconnected
方法,但SignalR断开连接主要发生在客户端离开相应页面时。
从我的角度来看,不是刚刚离开的客户要执行 fnDeleteCustomer
方法,而是要执行其余的方法,以便通知他们有人离开了。
希望对您有所帮助!祝你好运!
编辑:
如果您想通知所有其他客户有人离开了,您只需这样做:
public override OnDisconnected()
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
Clients.All.notifySomeoneLeft(customer.Name);
}
然后,您创建客户端方法 notifySomeoneLeft
:
$.connection.client.notifySomeoneLeft = function(customerName){
alert(customerName + "just left!");
};
就是这样。每当有人离开时,所有连接的客户端都会收到警报。
祝你好运!
public override OnDisconnected()
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
Clients.All.notifySomeoneLeft(customer.Name);
}
The context.connectionId is getting new connectionId instead of old one.
我在 TestHub(由 Hub 继承)class 中有一个用于信号 R 的断开连接方法。我无法从 [= 调用 javascript 方法 fnDeleteCustomer
12=] 方法,但是在 Connect 方法上调用相同的 js 方法。我做错了什么?
public override Task OnDisconnected()
{
try
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
if (customer!=null)
{
Clients.Client(customer.ConnectionID).fnDeleteCustomer(customer.UserId);
return base.OnDisconnected();
}
}
catch { };
return null;
}
根据MSDN:
Occurs when a connection disconnects from this hub instance.
因此您没有任何活动连接,您无法访问客户端中心及其方法。
我想你应该使用客户端 disconnected 事件:
$.connection.hub.disconnected(function() {
$.connection.hub.fnDeleteCustomer(userId);
});
可以找到有关信号器生命周期事件的更多信息here。
您无法执行fnDeleteCustomer
,因为在执行OnDisconnected
的那一刻,客户端已经与集线器断开连接,所以在那一刻,客户端将没有ConnectionId
.
当然,您可以使用客户端disconnected
方法,但SignalR断开连接主要发生在客户端离开相应页面时。
从我的角度来看,不是刚刚离开的客户要执行 fnDeleteCustomer
方法,而是要执行其余的方法,以便通知他们有人离开了。
希望对您有所帮助!祝你好运!
编辑:
如果您想通知所有其他客户有人离开了,您只需这样做:
public override OnDisconnected()
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
Clients.All.notifySomeoneLeft(customer.Name);
}
然后,您创建客户端方法 notifySomeoneLeft
:
$.connection.client.notifySomeoneLeft = function(customerName){
alert(customerName + "just left!");
};
就是这样。每当有人离开时,所有连接的客户端都会收到警报。
祝你好运!
public override OnDisconnected()
{
var customer = ConnectedUsers.Find(x => x.ConnectionID == Context.ConnectionId);
Clients.All.notifySomeoneLeft(customer.Name);
}
The context.connectionId is getting new connectionId instead of old one.