我的环境 - C#3.5和ASP.NET 4.0和VS 2010
道歉 - 对于与线程和异步方法相关的一些概念有点新鲜。
我的情况是:
加载预期 - 我预计每天会有大约100个正在运行的成员(占新成员+旧成员离开/停止)。
方程式约为每天100位访问者x每次提取4次提取x 12次提取/小时x 8小时/天
在我看来 - 我每天运行100个线程,每个'线程'在5分钟内唤醒一次并做一些事情。线程将与静态中央缓存交互,该缓存在所有这些缓存中共享。
我已经阅读了一些关于ThreadPools,AsyncPage等的讨论 - 这些都是一个新领域。在我的情景中,你会建议什么?这样做的最佳方法是什么,这样才有效?
在你的回复中,如果你提到使用的特定类/方法/链接,我将不胜感激,所以我可以追逐这个。非常感谢!
答案 0 :(得分:3)
您将无法使用ASP.net这样做,您将无法保持“线程”以任何级别的可靠性运行。 IIS可以决定在任何时间点重新启动应用程序池(I.E.整个过程)。真正需要的是某种运行并发出请求的Windows服务。您可以使用HttpWebRequest.BeginGetResponse
方法拨打电话。当响应回来时,这将激活相关代表,.net将管理线程。
答案 1 :(得分:1)
同意Ben,我不会在IIS中使用ASP.NET中的线程。这与在桌面应用程序中使用它不同。
如果您要使用某种轮询或定时操作,我建议使用处理程序(.ashx)或asp.net页面(aspx),它可以接收您想要在后台运行的请求并返回XML或JSON作为响应。然后,您可以在页面中设置一些javascript来对该URI执行AJAX请求并获取所需的任何数据。该处理程序可以执行您需要的服务器端操作。这将允许您在必要时运行后台进程并为您的用户更新前端,并将利用现有的IIS线程池,您可以对其进行扩展以适应您正在获得的流量。
所以,例如
ajaxRequest.ashx :处理“后台”请求,获取http POST / GET参数。
myPage.aspx :您的用户界面
someScript.js :javascript文件,其函数在发生某些操作或间隔时从myPage.aspx(或任何其他页面)调用ajaxRequest.ashx。
jQuery.js :无需自己编写所有AJAX代码或事件处理程序:)
答案 2 :(得分:0)
您需要创建一个单独的Windows服务(或使用Windows调度程序运行的控制台应用程序)来轮询远程服务器。
如果您需要根据用户与您网站的互动来触发请求,最好的方法是使用您的服务监控的某种排队系统(例如MSMQ)。