【问题标题】:How to know client is disconnected and clean up table data only for disconnected client from sql server using ASP.Net, WCF service & Client Session?如何使用 ASP.Net、WCF 服务和客户端会话知道客户端已断开连接并仅为断开连接的客户端从 sql 服务器清理表数据?
【发布时间】:2026-01-07 04:25:03
【问题描述】:

我的 Web 应用程序使用 ASP.NET 4.0 C#,其中我还使用了 WCF 服务并通过创建随机用户 ID 来维护会话。应用程序是关于视频管理系统。当我请求开始流式传输到 VSS(视频流服务器)时,我会将请求的摄像机和用户的所有流式传输详细信息插入 SQL 服务器表中。并且在断开该特定摄像机的视频流时,我将只从该用户的表中删除该条目。如果其他人看到直播,其他用户的条目将保持原样。

虽然某些网络断开连接或浏览器崩溃,但此条目将不清楚。所以我想知道,如果不需要从 Sql 表中清除数据,我怎么能知道一个客户端已断开连接,我只需要使用检查该用户的会话是否处于活动状态来清除其与该用户 ID 的数据映射。

请帮我解决这个问题。

【问题讨论】:

  • 连接到这个 WCF 服务的客户端到底是什么?是浏览器吗? WCF 客户端?一个HttpListener?其他类型的应用程序?
  • 是的,客户端是浏览器。我的应用程序还有 silverlight 页面,它们使用 WCF 服务来检索数据。

标签: javascript jquery asp.net wcf session


【解决方案1】:

网络通信的性质表明,您不能将缺少传入 IP 数据包解释为客户端崩溃、移动到其他地方、去喝杯茶或突然死亡的确凿证据。

要部分解决这个问题,您可以:

  1. 提供一个 Disconnect() 操作,可以调用该操作来显式终止会话 when the browser is closedotherwise navigates away。请注意,这是inherently unreliable
  2. 在客户端崩溃时实现合理的会话超时

这是假设您从浏览器进行 WCF 调用。

【讨论】:

  • 感谢您的回复。我已经将$(window).bind('unload', function (unloadLiveView();) {});<body onbeforeunload="unloadLiveView();" > 放在我的父页面中,它在浏览关闭以及浏览器的结束任务时都可以正常工作。但是,客户机器的网线被拔掉或计算机关机的情况会产生问题。我从 -link 找到了活动会话,但它应该从 WCF 服务调用,我找到了这种方式。如果有的话,WCF 服务如何找到客户端会话已经不复存在了。
最近更新 更多