2012-04-08 64 views
1

我有一个要求通知每个用户保存他们的工作和注销,以便管理员可以重置iis或在asp.net MVC应用服务器做一些改变。广播管理员消息给每个会话用户

循环通过会话对象集合不是线程安全的,这是我所学到的。

还有其他想法吗?

即使我可以获得活动会话如何发送消息给这些客户端?

在此先感谢。

回答

1

将消息保存在数据库中,并查询数据库中的每个请求以查看消息是否存在。

+0

我已经对每个请求都这样做了。但我希望从服务器本身启动此响应,而不是在任何用户请求之后。 – Deb 2012-04-08 00:27:33

+1

然后,您需要将消息推送给客户端,这是一项新的要求。您可以使用AJAX轮询来在服务器上执行某些操作。服务器操作然后可以查询数据库。 – usr 2012-04-08 00:52:27

0

这似乎是一个定义不明确的要求。

应在特定时间进行严格的维护,并且应提前向用户提醒该时间窗口。

简单地重新启动IIS是一个相当快的过程......是否有任何理由用户会失去他们的工作时,只需重新启动IIS?例如,我已经填写了这个StackOverflow答案,但他们可能已经重新启动了服务器十几次。一旦我点击发布,如果服务器关闭,它会超时并将我的工作留在textarea中,否则,如果服务器返回,它将成功连接。

如果我没有提交数据,但只是单击一个链接,同样适用:浏览器超时,在这种情况下,一旦服务器恢复后,简单的刷新就足够了,或者最终使用户在哪里他们想去。

如果你正在做纯粹的AJAX请求,你将需要自己处理一个缺失的服务器,而不是依靠浏览器来完成它,但是由于分布式计算的八大误区,你仍然需要解决这个问题。 #1:“网络可靠。” (见http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing

所以,我真的会推回这个要求。他们要求你做的事情不会真正满足需求(用户不会失去数据,有相当好的经验),这将变得复杂,最终这将是一个脆弱的解决方案。

+0

这是因为会话丢失,所有处于入口中间的用户立即开始对可怜的管理员发怒。在部署的前几个月,构建经常更新,这需要iisreset,因此需要用户警告。 – Deb 2012-04-08 00:24:59

+1

这听起来令人沮丧!也许这个要求应该是“会话数据在服务器重启后仍然存在”?这通常比花哨的东西容易实现...只需将会话数据存储在StateServer或SQL Server中即可。只有当您使用默认的“进程内”会话存储时,所有用户会话在重新启动时才会被擦除。 – 2012-04-08 01:08:15

+0

这只是其中的一个要求。经理想要分配一些工作或安排会议......等等。 – Deb 2012-04-08 01:18:10