【发布时间】:2016-06-28 11:11:26
【问题描述】:
我正在开发一个 Web API(效果很好)。少了什么东西?
这是Get Action 的示例代码:
public IEnumerable<xxxx> Get()
{
IEnumerable<xxxx> yyyy = new List<xxxx>();
//get yyyy from database
timer = new Timer();
timer.AutoReset = true;
timer.Enabled = true;
timer.Interval = 5000; //miliseconds
timer.Elapsed += timer_Elapsed;
timer.Start();
return yyyy;
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
//code to be executed when timer elapses...
}
因此,一旦收到请求,计时器将被初始化并以 5 秒的间隔触发 Elapsed 事件。在下一个后续请求中,这将继续......
预期的行为是这样的:
- 初始化请求 -1
- 初始化定时器 -1
- 如果在 5 秒内收到来自同一客户端的另一个请求,则计时器不得触发 elapsed 事件。
- 如果在 5 秒内未收到来自同一客户端的请求,则计时器应超时并触发事件。
而且计时器与客户端无关。
这是与此相关的进一步业务场景...... 我正在开发一个 Web API,它在打开时将被电子设备使用。只要电源可用,设备就会一直发送其 ON 状态。一旦用户关闭开关,对服务器的请求就会停止。
无论设备是开还是关,这些状态都会更新到数据库中。现在更棘手的部分是识别设备何时关闭(很复杂,因为如果设备停止发送任何请求,服务器不知道任何事情)。所以每个设备都有一个单独的计时器。
【问题讨论】:
-
如何识别客户?
-
您想在
Elapsed中运行什么代码?我认为这是一个 XY 问题。 -
我真的不需要识别客户端......我的实现与客户端无关。该实现假定,所有客户端都是相似的,并且将使用相同的数据提供服务......但是,可以根据其他标准拥有多个计时器
-
@PatrickHofman
Elapsed中应该包含什么代码?它可以是任何东西......假设我正在初始化一个变量并且没有在其他任何地方使用。 -
你必须向我们展示究竟会发生什么,因为这会影响方法。
标签: c# asp.net asp.net-mvc asp.net-web-api asp.net-web-api2