2010-12-07 82 views
1

这个问题是关于ASP.NET强加给我的限制(如脚本超时等)。asp.net无限循环 - 可以这样做吗?

我有一个服务在ASP.NET下运行,我想创建一个对应的监视服务。

主要服务的数据位于数据库中。
我在考虑让监控服务在一个循环内以1秒的间隔查询数据库,这个循环由远程客户端完成的http请求发出。
现在,这个监控的实际服务将通过客户端http请求来完成,该请求会使脚本循环(用C#编写),当检测到新数据时,它会将该数据聚合到该循环请求输出缓冲区中,发送它,并退出循环,从而完成请求。
客户将不得不发出新的请求,以保持获得更新。

这实际上就像TCP(就像Windows IOCP一样);您请求数据服务并等待它。当它到达时,你发出另一个请求。

我的实际问题是:你以前做过吗?它是如何去的?我受限于IIS/ASP.NET框架强加的一些(可配置)限制吗? 我在这种情况下有什么限制,或者,有什么更好的选择,而不是太复杂的东西

请注意,我一次不会期望很多此类监控请求,可能只有几十个。
然而,这意味着10个这样的并发监视请求将保持10个线程繁忙,问题是;它可以伤害IIS /性能吗? IIS将如何处理10个繁忙线程?它会发出更多?有什么限制?这只是我能想到的极限的一个例子。

回答

1

我认为你在这种情况下主要关心的是超时,这是非常可配置的。但我认为这是一个错误的解决方案 - 您最好使用后台服务,不断/定期运行,并将监控数据写入某个数据存储,然后您的监控页面将根据请求返回。

如果您希望您的页面只在监控数据可用时才显示某些内容 - 使用ajax实现 - 在页面加载查询监控服务上,则如果某些监控事件可用 - 如果不是,则进行渲染 - 睡眠并再次查询。

IMO这将是一个更好的解决方案比reallu长时间运行的请求。

+0

感谢您的答复哈桑。所以你建议为监控服务提供一个服务? – Poni 2010-12-07 14:19:51

+0

它可能是一项服务,它可能是一个预定的控制台应用程序 - 这是一个实施问题,但基本上 - 是的,我建议创建一个监视服务并让ASP.NET页面只显示监视报告到最后用户。这样你就可以得到一个更清洁的架构,并且你不会受限于少量的用户,查看监控日志(因为查看将是非常便宜的操作) – Hassan 2010-12-07 14:40:52

0

我认为它不会监视使用ASP.NET服务一个很好的主意,由于以下原因...

  1. 会发生什么事时,你的应用程序池崩溃?

  2. 如果您决定执行IISReset,该怎么办?首先应用哪个应用程序...主应用程序或监视应用程序?

  3. 如果监控应用程序由于负载而挂起该怎么办?

  4. 如果主服务上的负载已经很高,该怎么办?不会每1秒监控一次,增加主服务以及IIS上的负载?

你的想法...