SignalR 2不会更新

时间:2015-03-31 07:30:58

标签: c# asp.net signalr signalr-hub sqldependency

我有一个asp.net页面,它使用SQLDependency Asp.Net SignalR 2自动显示数据库中的更改。我的问题是,即使在我调试时它们是正确的,我也看不到页面上的更改。如果我更新数据库,页面仍会显示旧数据,但我的集线器会获取新数据。但它没有显示出来。我唯一能做的就是通过这样的计时器重新加载页面..

<script>
    function cache_clear() {
        window.location.reload(true);
    }

    $(document).ready(function () {
        var count = 60;
        setInterval(function () {
            $("b[id=show-time]").html(count--);
            if (count == 0) cache_clear();
        }, 1000)});
</script> 

但是这也使得SqlDependency的整个想法变得多余。任何人都可以给我一些提示我需要做些什么才能让更新的数据显示在页面上?

    <script>

        $(function () {
            var notify = $.connection.notificationsHub;

            notify.client.displayNotification = function (msg) {
                $("#newData").html(msg);
                $("#LitDiv").hide();
            };

            $.connection.hub.start();
        });
    </script>

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            if (e.Info == SqlNotificationInfo.Insert || e.Info == SqlNotificationInfo.Delete || e.Info == SqlNotificationInfo.Update)
            { SendNotifications(); }
}            

        public void NotfiyAllClients(string msg)
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>();
            // I can see that my database changes are made here, but it does not display that on the page unless I reload the page
            context.Clients.All.displayNotification(msg);
        }    

SendNotification方法使用此...

var nHub = new NotificationsHub();
nHub.NotfiyAllClients(message);

编辑:如果我调出控制台,我会收到此错误..

JavaScript runtime error: Unable to get property 'notificationsHub' of undefined or null reference

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,我在页面上有两个对jQuery的引用。 第一个放在head部分,是jquery-1.6.4.min,另一个放在body标签结束之前(jQuery v1.11.2)。

删除放置在body标签末尾的那个(jQuery v1.11.2)之后,它就像被驱逐一样。

答案 1 :(得分:0)

我认为您的集线器定义不正确(伪代码不是100%):

这是您的中心定义:

class NotificationsHub : Hub {
    public void DisplayNotification(string msg){}
}
SendNotification方法中的

使用:

 IHubContext context = GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>();
 context.Clients.All.displayNotification(msg);

或使用单独的线人类而非集线器