none
通过后台数据的“变化”(比如新增或者是更新时),来局部刷新前台的页面问题(除去在页面定时刷新设置外) RRS feed

  • 问题

  • 通过后台数据的“变化”(比如新增或者是更新时),来局部刷新前台的页面问题(除去在页面定时刷新设置外)


    有这么一个功能要求:
        在做web开发时,想要通过在后台数据有变化的时候,才在页面局部刷新前台数据显示?

    现在能想到的办法:
        页面的局部刷新显示的问题,能选择的就是ajax,并且也可以设置定时来刷新该局部的页面。但我的要求是只有在后台的数据库数据有变化的时候,才来触发这个刷新前台页面局部数据,不知道这个功能可以在.Net 2008开发里,用什么方法来实现呢?
        在.Net开发环境里,凡是能借助其它软件实现的办法也行?,请朋友们多给点意见哈:)


    2009年6月5日 14:01

答案

  • 你好,如果不用定时器由前台主动拉的话,在Web的范围是无法实现的,服务器是无法告知浏览器的,只有浏览器主动去请求。如果使用Socket就可以实现,它跟服务器一直保持通讯,可以前呼后拥,也可以后呼前应!
    邹俊才
    2009年6月7日 4:36
    版主
  • 你好,目前不借助插件实现其实都是能过定时器来做的,Server Push 技术也是有一个定时器的, 如果想得到即时消息,可以自己编写 Active X 利用 Socket, Remoting 等一些技术来实现.
    知识改变命运,奋斗成就人生!
    2009年6月5日 14:18
    版主
  • web服务器的特性决定了无法在IE跟SVR之间保持状态,应该是无解,除非自己写Activex,服务器加一个服务器端
    就我目前了解的技术来说好像只能这么处理
    web服务器的这种特性可以降低占用连接资源,如果订时器设的间隔不是很短应该不会浪费太多资源
    如果只是担心耗费资源可以用一些别的折衷的办法,比如先请求服务器一个是否需要更新的标志,这个流量应该会很小,只用一个字符就可以,得到需要更新的标志则调用更新,否则继续定时等待
    • 已编辑 kinsun 2009年6月8日 3:59
    • 已建议为答案 kinsun 2009年6月8日 4:00
    • 已标记为答案 KeFang Chen 2009年6月8日 5:28
    2009年6月8日 3:51

全部回复

  • 你好,目前不借助插件实现其实都是能过定时器来做的,Server Push 技术也是有一个定时器的, 如果想得到即时消息,可以自己编写 Active X 利用 Socket, Remoting 等一些技术来实现.
    知识改变命运,奋斗成就人生!
    2009年6月5日 14:18
    版主
  • 你好,目前不借助插件实现其实都是能过定时器来做的,Server Push 技术也是有一个定时器的, 如果想得到即时消息,可以自己编写 Active X 利用 Socket, Remoting 等一些技术来实现.
    知识改变命运,奋斗成就人生!

    对呀,就是想通过后台数据有变化时,才来通知前台程序来刷新局部页面的,也就是由后向前推(push)的效果!
    而你说的Server Push它也是有一个定时器,这样的话是要比直接在页面局部刷新页面要节省资源些的,它是怎么用的呢?:)

    在.Net 2008的环境下,能不能做到只有在后台数据变化了的情况下,使台后数据库用推(push)的办法向前台程序发出可刷新的通知呢?这样就可以避免还是有些定时作用“侦听”的设置了:)
    2009年6月5日 16:09
  • 你好,如果不用定时器由前台主动拉的话,在Web的范围是无法实现的,服务器是无法告知浏览器的,只有浏览器主动去请求。如果使用Socket就可以实现,它跟服务器一直保持通讯,可以前呼后拥,也可以后呼前应!
    邹俊才
    2009年6月7日 4:36
    版主
  • 你好,如果不用定时器由前台主动拉的话,在Web的范围是无法实现的,服务器是无法告知浏览器的,只有浏览器主动去请求。如果使用Socket就可以实现,它跟服务器一直保持通讯,可以前呼后拥,也可以后呼前应!
    邹俊才

    我的要求是不是由前端主动拉的,而是在后台有数据变化时由后向前推的:)
    除了定时检索外,有没有在数据库与服务器端的程序间建立实时处理的办法没有呢?
    你也说得对,由于web程序的特殊性,需要有请示和响应的!到现在为止,.net平台上有没有什么办法能较好解决web客户端--服务器程序--数据库三者间实时机制的办法呢?!!
    如果保持一直的长连接的话,这势必要耗费大量的服务器资源,连接数越多,响应速度也就要降低的了,那么有没有更节省服务器资源又能较好解决实时要求的办法???
    2009年6月7日 7:02
  • 在ASP.NET中,Cache类的特点是它能根据各种依赖来良好的控制自己的行为。以文件为基础的依赖是最有用的,文件依赖项是通过使Cache.Insert并提供引用文件的CacheDependency对象添加的。

    Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));

    但是当我们想让缓存根据数据库的变化而失效的时候,应该怎么做呢?这种情景在很多应用程序中都存在。ASP.NET没有为监视数据库表的变化提供内在的直接缓存支持。利用SQL Server的不常用的系统存储过程sp_makewebtask,是可以达到这个目的的,这个存储过程本来是用作从查询中生成web页面的,但是我们只要稍作修改,在触发器中使用它,我们就可以取得一个合理有效的途径,当数据库某张表的记录被更新,删除或者修改时来修改某个特定的文件,这样会使在CacheDependency实例中的文件监视进程侦测到文件的变化,从而使缓存失效。事实上,因为CacheDependency 类工作在UNC文件协议上,我们可以在整个WebForm上部署这个解决方案。
    邹俊才
    2009年6月7日 16:22
    版主
  • 你好,如果不用定时器由前台主动拉的话,在Web的范围是无法实现的,服务器是无法告知浏览器的,只有浏览器主动去请求。如果使用Socket就可以实现,它跟服务器一直保持通讯,可以前呼后拥,也可以后呼前应!
    邹俊才

    我的要求是不是由前端主动拉的,而是在后台有数据变化时由后向前推的:)
    除了定时检索外,有没有在数据库与服务器端的程序间建立实时处理的办法没有呢?
    你也说得对,由于web程序的特殊性,需要有请示和响应的!到现在为止,.net平台上有没有什么办法能较好解决web客户端--服务器程序--数据库三者间实时机制的办法呢?!!
    如果保持一直的长连接的话,这势必要耗费大量的服务器资源,连接数越多,响应速度也就要降低的了,那么有没有更节省服务器资源又能较好解决实时要求的办法???
    这不是.net所能解决的,是Web程序本身的限制。长连接是比较好的选择。
    【孟子E章】
    2009年6月8日 0:49
    版主
  • web服务器的特性决定了无法在IE跟SVR之间保持状态,应该是无解,除非自己写Activex,服务器加一个服务器端
    就我目前了解的技术来说好像只能这么处理
    web服务器的这种特性可以降低占用连接资源,如果订时器设的间隔不是很短应该不会浪费太多资源
    如果只是担心耗费资源可以用一些别的折衷的办法,比如先请求服务器一个是否需要更新的标志,这个流量应该会很小,只用一个字符就可以,得到需要更新的标志则调用更新,否则继续定时等待
    • 已编辑 kinsun 2009年6月8日 3:59
    • 已建议为答案 kinsun 2009年6月8日 4:00
    • 已标记为答案 KeFang Chen 2009年6月8日 5:28
    2009年6月8日 3:51
  • 谢谢各位的解答哈
    to 邹俊才:使用缓存机制有些启示的
    to kinsun:这个也是我现在打算用的办法:)
    2009年6月8日 16:56