简称即时信息比如:当SQL数据库字段Mess_Status由0变成1后,在ASP.NET 能知道数据库状态发生了变化,从而触发相应事件,千万不要使用 JS+AJAX不断的局部新的,因为用户多,服务器资源承受不了请各路高手过来帮忙,给出思路或者有用的方法

解决方案 »

  1.   

    请给个思路,我使用SQL触发器,触发不了ASP.NET的事件
      

  2.   

    反向Ajax.  用HTTP长轮询,XMLHttpRequest对象.
      

  3.   


    可能我对这种技术不了解,但好像实现不了,在数据库状态发生改变情况下,在ASPX页面没有任何手动触发事件动作,就能体现出,数据库已经发生了变化,
    能否提供详细一点你的思路
      

  4.   

    需要利用Cache缓存,把数据库该字段的记录加到Cache里,对其监控,一旦发现变化则触发事件。
      

  5.   


    确实无法由服务器主动给页面发信息。目前的很多反向技术其实也是通过轮询实现,简单点的就是你已经排除掉的方法:Ajax间隔请求----这种方法会产生很多空请求。 所以另一种思路是一个长轮询,一直挂在服务端,模拟一个有效的连接,这样的缺点是每个页面都维持着这样一个'连接'. 
      

  6.   

    observer模式  
     public event EventHandler<EventArgs> SqlChangingHandler
    定义一个数据库更改事件 
    当数据库更改完成后注册改事件
     然后监视者发现更改后执行改事件
      

  7.   

    SQL2005 主动通知机制,没使用过不知行不行得通
      

  8.   

    数据库更改事件 更改事件能主动跟ASP联系吗
      

  9.   

    1、是否你可以调整修改该数据字段的触发程序,使他直接调用
    2、6楼的办法也可以,cache的数据库回调选项
    3、写一个job来监控数据字段,sql job,程序job都可以
    4、也可以用sql job或触发器 修改一个文件,程序监控文件,FileSystemWatcher另外你没有确定是监控一条数据的一个字段,还是多条
    你需要测试各个方案,找到场景能接受的最佳方案
      

  10.   

    如果是在sql手动更改时不会主动联系
    在程序里面更改莫个字段后 
    注册改事件  这样是可以的
      

  11.   

    我使用cache 测试,cache不会失效的,代码如下:
       protected void a_query_Click(object sender, EventArgs e)
        {        bangding();       
            aabb();
        }  
        public void aabb()
        {
            string[] ds = HttpRuntime.Cache["BlockedIPCacheKey"] as string[];        
            if (ds != null)
            {
                Label4.Text = "来自Cache"+ds[0];
            }
            else
            {
                num_status();
            }
        
        }
        public string[] num_status()
        {
            string[] value = { };        string sql = @"SELECT ReadID,Read_Status as temp FROM [Mess_Reader] where Read_Status=0";        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["gft_esp"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            try
            {
                cmd.Connection = conn;
                conn.Open();
                cmd.CommandText = sql;
                SqlDataReader rs = cmd.ExecuteReader();
                SqlCacheDependency dependency = new SqlCacheDependency(cmd);//把连接实例cache
                List<string> message_content = new List<string>();
                while (rs.Read())
                {
                    message_content.Add(rs["temp"].ToString().Trim());
                }
                rs.Close();
                conn.Close();
                value = message_content.ToArray();
                HttpRuntime.Cache.Insert("BlockedIPCacheKey", value, dependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                conn.Close();
            }
            finally
            {
                conn.Close();        }
            return value;
        }
      

  12.   

    AspNet_SqlCacheTablesForChangeNotification 表是存在的
      

  13.   

    结贴了,使用6楼cache缓存的方案解决了问题,谢谢各位帮忙 ,
    谢谢jiuhexuan,给我思路,