SignalR通知未向所有客户端显示

时间:2014-05-04 07:24:28

标签: asp.net signalr

这是Hub Class

public class NotificationHub:Hub
    {
        public void Hello(string msg)
        {
            Clients.All.helloEveryone(msg);
        }
    }

按钮单击document.ready function

中的服务器端调用
   $.connection.hub.start().done(function () {
                $('#setnotification').click(function () {
                    var notifier = $.connection.notificationHub;
                    notifier.server.hello('World!');
                });

这是对所有客户的呼叫

 <script type="text/javascript">
        var notifier = $.connection.notificationHub;
        notifier.client.helloEveryone = function (msg) {
            $('#chatWindow').text(msg);
        }
</script>

但问题是当我有两个浏览器打开时我可以看到只有活动浏览器显示通知。不是另一个。

1 个答案:

答案 0 :(得分:1)

请查看http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20-and-mvc-5

每次单击按钮时,您都会注意到您正在绑定JavaScript客户端对象,这很可能会导致问题。建议看看这个URL的示例如何实例化客户端并从那里开始。请注意,他们在文档就绪中执行$ .connection.hub.start(),而不是每个聊天请求

问题是在按钮单击事件和全局范围内声明相同的变量名称通知程序?根据代码在DOM中的位置,您应该只需将setnotification客户端中的行更改为notifer.server.hello即可使其工作。只需调用DOM中声明的全局通知程序即可。不要重新建立连接 这可以作为一个简单的例子:

<script type="text/javascript">
    var notifier = $.connection.notificationHub;
    notifier.client.helloEveryone = function (msg) {
        $('#chatWindow').text(msg);
    });
    $(function(){
        notifier.start().done(function(){
            $("#setnotification").click(function(){
                notifier.server.hello('World!');
            });
        });
    });
</script>