【问题标题】:ASP.NET MVC Can I have a loop always be running even when no one visits the website?ASP.NET MVC 即使没有人访问该网站,我是否可以始终运行一个循环?
【发布时间】:2014-06-23 23:12:25
【问题描述】:

ASP.NET MVC 即使没有人访问该网站,我能否让循环始终运行?

即使没有人访问,是否可以在网站上运行循环。 我想创建一个循环来检查列表中高于 30 分钟的值,如果这样它会从列表中删除用户。但是我应该把这个循环放在哪里呢?

我制作了自己的登录系统,并使用了自己的 DLL,现在我想添加会话,以便会话过期。 我正在考虑制作一个代理来检查绑定到会话 ID 的日期时间列表。 如果 DateTime 超过 30 分钟,则 Session ID 将被删除,用户将不得不重新登录。

【问题讨论】:

  • 请求进来时为什么不能这样做?
  • @AlexeiLevenkov 你的意思是在页面加载中?循环会保持足够长的时间吗?
  • 听起来你想创建一个windows服务。
  • 很明显Cache(几乎完全符合您的描述)不是答案......并且在使用list之前做list = list.Where(u=>u.NotHigherThan30Min)也不是答案,因为它不会很复杂够了......也只需构建“你自己的调度程序” - 有趣和教育,只是不要使用你为真实网站构建的任何东西。
  • 仅供参考,如果您关心安全性,您不想使用 Session 来管理登录。其次,只需将会话超时设置为 30 分钟,您甚至不必担心它。

标签: c# asp.net asp.net-mvc loops asp.net-4.0


【解决方案1】:

即使没有人,是否可以在网站上运行循环 来访?

是的,你可以。只需创建一个无限循环。或者创建一个计时器。注意IIS's thread pool limit导致的线程饥饿:

IIS 线程池的最大线程数为 256。此线程 池的设计方式使其无法处理长时间运行 任务很好。 IIS 团队的建议是切换到 如果您要进行大量工作(例如由完成),请使用另一个线程 以集成模式运行时的 ASP.NET ISAPI 和/或 ASP.NET IIS 7. 否则您将占用 IIS 线程并阻止 IIS 从 HTTP.sys 获取完成。所以出于这个原因,ASP.NET 总是向 IIS 返回挂起状态,并调用 QueueUserWorkItem 到 将请求发布到 CLR 线程池。在 v2.0、3.5 和 4.0 中, ASP.NET 使用每个处理器 100 个线程来初始化 CLR 线程池 (这是默认设置,这是可配置的)。所以在双核服务器上, 池中最多有 200 个线程。

看起来你正在实现的是一个状态服务器:

状态服务可以在与 Web 相同的机器上运行 应用程序或专用服务器计算机上。使用状态服务 当您需要进程外会话状态管理时,该选项很有用 但不想在主机上安装 SQL Server 国家。

确实,ASP .NET 有一个单独的进程(不同于工作进程)来运行这个循环:

然后会话状态被存放在一个不同的运行进程中 来自 ASP.NET 工作进程。 StateServer 模式取决于 ASP.NET State Service 要启动并运行(此服务已安装 当您安装 .NET 运行时)。默认情况下,服务侦听 通过端口 42424,尽管您可以在每台机器上更改它 通过改变的值 HKLM\System\CurrentControlSet\Services\aspnet_state\Parameters\Port 注册表中的键。

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多