使用提示的技术:
我正在为我的 API 实现一个 ServerPush 设置,以从事件服务器(无轮询)获取实时通知。基本上,服务器有一个 RegisterMe() 和 UnregisterMe() 方法,客户端有一个称为 Announcement(string message) 的回调方法,通过 WCF 中的 CallbackContract 机制,服务器可以调用。这似乎运作良好。
不幸的是,在此设置中,如果服务器崩溃或不可用,客户端将不知道,因为它只是在侦听消息。在线沉默可能意味着没有公告,或者可能意味着服务器不可用。
由于我的目标是减少轮询而不是即时性,因此我不介意在服务器上添加一个 void Ping() 方法以及 RegisterMe() 和 UnregisterMe() ,该方法仅用于测试与服务器的连接性。我相信,定期测试这种方法可以确保我们仍然保持连接(并且传输没有丢弃任何公告,因为这是 TCP)
但是 Ping() 方法是必需的还是默认情况下作为 WCF 的一部分提供的连接测试 - 例如 serverProxy.IsStillConnected() 或其他东西。据我了解,通道的状态只会在失败的 Ping() 之后返回故障或关闭,而不是代替它。
2)从更广泛的角度来看,这种回调方法是否可靠?这不适用于 http 或 ajax - 连接的客户端数量将很少(数十个客户端,最大)。这种方法是否存在严重问题?由于这似乎是一个轻微的风险,我如何通过不足够快地处理它的回调队列来限制慢速/恶意客户端阻塞服务器?是否有一种特定于回调的超时,我可以设置而不影响其他操作?