gpt4 book ai didi

c# - SignalR:检测 C# 客户端中的事件连接

转载 作者:可可西里 更新时间:2023-11-01 08:05:06 29 4
gpt4 key购买 nike

我目前正在使用 SignalR (2.1) Hub 开发应用程序。

我有 1 个 WPF 客户端,另一个是 WCF 客户端。一切正常,因为它们完美地传递了消息。

我现在面临的唯一问题是,我注意到当应用程序因自动重启、WCF 服务器关闭和其他一些原因而关闭时,OnDisconnected 根本没有被触发。超时默认为 30 秒。即使过了 1 天(我试过)也不会调用它。但是,超时适用于 Web 客户端。

它仅在我调用 hub.connection.stop() 时有效。

然而,当客户端是浏览器时,Ondisconnected 方法非常有效。

因此,我想问一下,Signal R Hub 端是否有任何方法能够检查客户端是否仍然连接或已经断开(例如 ping)?

最佳答案

在 SignalR 2.1.0 中,有一个 new overload to OnDisconnected这需要一个 bool 指示客户端是否正常断开连接。 2.1.0 release notes 的“重大更改”部分解释了此更改背后的原因。 .

您的新 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);
}

不接受 bool 值的旧 OnDisconnected 方法不会为非优雅断开调用,因此如果您正在使用该事件,这可以解释您所看到的问题。

在 2.1.0 之前,(唯一的)不带参数的 OnDisconnected 方法被调用用于优雅的非优雅的断开连接。由于这种行为变化导致了 several reported issues ,旧的 OnDisconnected 重载 is being removed in SignalR's upcoming 2.1.1 release .

这将导致使用 SignalR 的旧 OnDisconnected 方法的应用程序在针对 SignalR 2.1.1 构建时无法编译。虽然这并不理想,但它有望让开发人员意识到这一重大变化,以便他们有机会在部署应用之前适本地修改它们。

关于c# - SignalR:检测 C# 客户端中的事件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878187/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com