使用SqlCacheDependency获取实时更新?-ASP.NET

使用SqlCacheDependency获取实时更新?-ASP.NET,.net,asp.net,polling,long-polling,.net,Asp.net,Polling,Long Polling,我希望在网页上显示实时更新(基于数据库表中由外部进程更改的状态字段)。根据我的研究,有几种方法可以做到这一点 长轮询(Comet)-这似乎很难实现 定期轮询-我可以让AJAX方法每5秒触发一次数据库命中,以获取当前状态。但我担心这会带来性能问题 然后我了解了如何使用SqlCacheDependency——缓存基本上会根据表中的字段失效。我假设我可以在缓存失效时使用触发的事件向用户显示新的更新 什么是不会出现性能问题的简单解决方案?与其轮询数据库,不如轮询web服务器上是否存在文件,比如轻量级

我希望在网页上显示实时更新(基于数据库表中由外部进程更改的状态字段)。根据我的研究,有几种方法可以做到这一点

  • 长轮询(Comet)-这似乎很难实现
  • 定期轮询-我可以让AJAX方法每5秒触发一次数据库命中,以获取当前状态。但我担心这会带来性能问题
然后我了解了如何使用
SqlCacheDependency
——缓存基本上会根据表中的字段失效。我假设我可以在缓存失效时使用触发的事件向用户显示新的更新


什么是不会出现性能问题的简单解决方案?

与其轮询数据库,不如轮询web服务器上是否存在文件,比如轻量级js文件,这样更具可扩展性和性能。 文件的内容并不重要,但为了让您了解情况,您可以使用某种JSON对象来更详细地描述过程的结果

然后,作为最后一步进行处理的后台进程可以创建文件或调用web层上的web服务来执行此操作

下面是它的工作原理

用户按下发送到服务器的按钮

服务器启动进程并返回标识符,例如C3201620-E622-4fe2-9F3A-E02FFA613F59

然后,Web UI会定期轮询是否存在C3201620-E622-4fe2-9F3A-E02FFA613F59.js,javascript将管理404错误并不断重试,直到收到200个错误

希望这能给你一些想法

在jQuery中处理404的代码示例

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

与轮询数据库不同,更具可扩展性和性能的方法是轮询web服务器上是否存在文件,比如轻量级js文件。 文件的内容并不重要,但为了让您了解情况,您可以使用某种JSON对象来更详细地描述过程的结果

然后,作为最后一步进行处理的后台进程可以创建文件或调用web层上的web服务来执行此操作

下面是它的工作原理

用户按下发送到服务器的按钮

服务器启动进程并返回标识符,例如C3201620-E622-4fe2-9F3A-E02FFA613F59

然后,Web UI会定期轮询是否存在C3201620-E622-4fe2-9F3A-E02FFA613F59.js,javascript将管理404错误并不断重试,直到收到200个错误

希望这能给你一些想法

在jQuery中处理404的代码示例

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 
您有两个问题:

  • 检索要推送的数据
  • 将数据推送到客户端
  • 第#1项很简单,假设您有一个相当有效的查询,并且您不是为每个用户查询它;只需查询、获取数据并推送即可。您可以使用SqlDependency选项,也可以只轮询它;这取决于你的数据有多重

    第#2项有点棘手,因为您需要经常访问服务器,或者使用comet服务器。我们已经在冰冻山编写了一个高度可扩展的.NET comet服务器,这可能符合我们的要求。基本上,您有一个单独的流程来驱动发布,WebSync将处理将数据推送到客户端的过程。

    您有两个问题:

  • 检索要推送的数据
  • 将数据推送到客户端
  • 第#1项很简单,假设您有一个相当有效的查询,并且您不是为每个用户查询它;只需查询、获取数据并推送即可。您可以使用SqlDependency选项,也可以只轮询它;这取决于你的数据有多重


    第#2项有点棘手,因为您需要经常访问服务器,或者使用comet服务器。我们已经在冰冻山编写了一个高度可扩展的.NET comet服务器,这可能符合我们的要求。本质上,您有一个单独的进程来驱动发布,WebSync将处理将数据推送到客户端的过程。

    性能方面-为什么您觉得WebUI轮询文件的存在比轮询数据库更好?性能可能可以忽略不计,尽管提供静态文件总是比查询数据存储更快。关键区别在于可伸缩性。Web服务器非常擅长服务静态文件,而且文件不一定要存储在本地Web服务器上,而是可以使用CDN(内容交付网络),通过这种方式,您可以将所有轮询流量从核心web服务器中移除。从性能角度看,为什么您觉得WebUI轮询文件的存在比轮询数据库更好?性能可能可以忽略不计,尽管为静态文件提供服务总是比查询数据存储更快。关键区别在于可伸缩性。Web服务器非常擅长为静态文件提供服务,而且文件不一定要存储在本地Web服务器上,而是可以使用CDN(内容交付网络),这样可以消除核心Web服务器的所有轮询流量。