asp.net应用程序中的后台线程

时间:2012-04-22 05:14:59

标签: asp.net multithreading global-asax application-start application-end

我在global.asax中的Application_Start()中运行后台线程 像Windows服务一样使用它 但是当我的网站上的所有会话结束时,applicaton_end会激活

我有一个与webservice一起工作的短信业务,我希望在我的服务器中有代理 检查传入的消息,如Windows服务

我将会话超时增加到10小时,但当我关闭浏览器应用程序结束时 我的线程停止工作

我无法更改服务器属性

我可以禁用application_end让线程继续工作吗?

由于英语写作不好,我向你道歉

3 个答案:

答案 0 :(得分:1)

您应该创建一个单独的程序,作为服务或批处理程序运行。虽然ASP.NET在页面加载之间保留静态变量等,但您不应该使用它在后台运行。无法保证事情会继续存在。

如果在服务器上发生某些事情时需要在用户端发生某些事情(比如收到的消息(比如在Facebook上),有人响应请求,或者引发了其他一些事件)你需要实现一个轮询系统在网页上的javascript中,用户看到哪个使用AJAX(查找它......这么棒的概念)定期与服务器通话,看看是否发生了任何事情。这就是Facebook聊天与大多数网络邮件系统一起检查新邮件的方式。服务器不与浏览器通信...浏览器询问服务器是否发生了任何事情。

以下是使用AJAX的聊天程序示例:http://www.dynamicajax.com/fr/JSON_AJAX_Web_Chat-.html

这不完全是你在做什么,但它展示了在页面加载后尝试检查某些内容并让用户的浏览器响应的概念。

答案 1 :(得分:0)

可以使用.NET版本的quartz-scheduler库(http://quartz-scheduler.org/)根据配置(cron expresion)定义和触发作业。

答案 2 :(得分:0)

当网站中没有会话打开时,iis会自动关闭网站应用程序 禁用此功能,您可以在iis中更改空闲时间或在global.asax(application_end)函数中读取网站链接以启动新会话