检测ASP.NET Web应用程序中客户端丢失的最佳实践

时间:2014-07-27 17:10:55

标签: c# .net timer user-inactivity

这不是一个具体的编码问题,而是一个针对五年级电信软件开发多年经验的网络应用程序世界的新手的最佳实践建议。

我有一个ASP.NET Web应用程序,它从几个嵌入式(Arduino)设备收集数据。设备通过简单的HTTP GET请求定期推送数据。在正常情况下,每个设备每30秒推送一次数据。但是,设备可能会丢失或从设备到服务器的连接可能会丢失。我需要在2-3个正常数据报告周期内检测到这种情况。

如果它是一个典型的独立C#应用程序,每次从设备过期设置为最大超时持续时间的数据时,我都会启动计时器。如果计时器到期,这意味着我没有从设备中听到太长时间,我需要从我的应用程序中触发警报(电子邮件或其他内容)。

因此,对于具有非持久连接的独立永远在线应用程序,非活动计时器方法似乎非常典型。但是在ASP.NET Web应用程序中执行此操作的正确方法是什么?我可以在HTTP请求处理程序之外运行此类计时器吗?

我搜索了可能的解决方案,人们似乎对超时浏览器会话有更多疑问。我的问题在这些方面有所不同:

  1. 我有一个非常轻量级的客户端无法进行会话状态跟踪
  2. 我需要及时检测到不活动状态,以警告/警告在发生警报之前未与系统交互的用户
  3. 感谢您分享智慧。

1 个答案:

答案 0 :(得分:0)

我的建议是,如果您使用get将数据添加到服务器,请切换到post。其次,尝试使用某种令牌。用户发出的第一个请求(获取请求)应该是他们可以获得访问令牌的端点。然后每当他们通过post连接推送数据时,从头文件中获取访问令牌。检查令牌是否已过期。如果它是好的,处理他们的请求并使用新的访问令牌进行响应。如果访问令牌已过期,请将它们转到端点以获取新的访问令牌。

对于访问令牌,您可以将其设置为在一段时间后过期。你会做类似的事情:

var timeDiff = DateTime.UtcNow - AccessToken.DateTime;
if (timeDiff.Minutes > 3)  // expired
else                       // still good

这是你要做的事情,虽然获取访问令牌需要更多的代码。

修改

javascript有一条interval指令可以在一个单独的线程上循环并延迟一段时间。你可以让它运行检查访问令牌,看看它是否会过期。当有一分钟直到(或其他)过期时,提示用户。拥有服务器端的东西仍然是最好的方法