我目前正在使用SignalR(2.1)Hubs开发一个应用程序.
我有一个WPF客户端,另一个是WCF客户端.一切都很好,因为他们完美地传递了信息.
我现在遇到的唯一问题是我注意到当应用程序因自动重启,WCF服务器故障以及其他一些原因而关闭时,OnDisconnected根本没有被触发.超时是默认值30秒.即使过了1天,我也从未打过电话(我试过).但是,超时适用于Web客户端.
它只在我调用hub.connection.stop()时才有效.
然而,当客户端是浏览器时,Ondisconnected方法非常有效.
因此,我想问一下Signal R Hub是否有办法检查客户端是否仍然连接或已经退出(例如ping)?
hal*_*r73 23
在SignalR 2.1.0中,OnDisconnected有一个新的重载,它接受一个bool来指示客户端是否正常断开连接.这一变化背后的原因在2.1.0发行说明的"重大更改"部分进行了解释.
您的新OnDisconnected方法可能如下所示:
public override Task OnDisconnected(bool stopCalled)
{
if (stopCalled)
{
// We know that Stop() was called on the client,
// and the connection shut down gracefully.
}
else
{
// This server hasn't heard from the client in the last ~35 seconds.
// If SignalR is behind a load balancer with scaleout configured,
// the client may still be connected to another SignalR server.
}
return base.OnDisconnected(stopCalled);
}
Run Code Online (Sandbox Code Playgroud)
不使用bool的旧OnDisconnected方法不会因非正常断开连接而被调用,因此如果您正在使用该事件,则可以解释您所看到的问题.
在2.1.0之前,对于正常和非正常断开连接,都调用了(仅)OnDisconnected方法,该方法没有参数.由于此行为更改已导致多个报告问题,因此在SignalR即将发布的2.1.1版本中将删除旧的OnDisconnected重载.
这将导致使用SignalR的旧OnDisconnected方法的应用程序在针对SignalR 2.1.1构建时无法编译.虽然这并不理想,但它有望让开发人员意识到这一重大变化,因此他们有机会在部署之前适当地修改他们的应用程序.
| 归档时间: |
|
| 查看次数: |
10770 次 |
| 最近记录: |