无法在OnDisconnected上调用客户端方法
Not able to call client method on OnDisconnected
我在信号R的TestHub(由Hub继承(类中有一个disconnect方法。我无法从OnDisconnected
方法调用javascript方法fnDeleteCustomer
,但在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:
当连接从此集线器实例断开连接时发生。
因此,您没有任何活动连接,也无法访问客户端集线器及其方法。
我想您应该使用客户端断开连接事件:
$.connection.hub.disconnected(function() {
$.connection.hub.fnDeleteCustomer(userId);
});
有关信号机生存期事件的更多信息,请点击此处。
您无法执行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);
}
context.connectionId正在获取新的connectionId,而不是旧的connectionId。
相关文章:
- SignalR 不从服务器调用客户端方法
- 调用客户端函数
- 在 SQL 依赖项更改后调用客户端函数
- 调用客户端 javascript/webpop 的表单的 DoS 风险/漏洞
- 如何先调用客户端脚本函数,然后再调用服务器端按钮单击事件
- 从asp.net c页面调用客户端javascript
- 在不打开新页面的情况下从浏览器调用客户端URL
- Signalr-连接已启动,但未使用websocket调用客户端事件
- 如何使用socket.io从服务器调用客户端方法
- Safari在服务器端的刷新/加载前不运行回调函数(调用客户端代码)
- ServiceNow UI操作调用客户端和服务器代码
- 服务器端函数调用客户端Javascript函数以获取结果
- JQuery-在Asp.Net中调用客户端的服务器端事件
- SignalR-Hub在IIS停止后,启动将不再调用客户端函数
- 会话属性在调用客户端重定向后丢失
- 客户端应该调用服务器还是服务器应该调用客户端?我错过了什么?
- 如何在NetSuite中调用客户端的PageInit函数
- 从c#页面方法调用客户端脚本(javascript,jquery等)
- 无法在OnDisconnected上调用客户端方法
- 从自定义方法调用客户端事件