2014-05-04 105 views
1

這裏是中心類SignalR通知沒有顯示到所有客戶端

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

按鈕的功能的document.ready

$.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> 

但問題是,當我有兩個瀏覽器打開我可以看到,只有活動瀏覽器顯示th電子通知。不是另一個。

回答

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> 
+0

嘗試,但像以前一樣工作,代碼更新 –

+0

請參閱編輯答案 - 通知名稱衝突。對不起在答案解決中犯了錯誤。只是使用已在DOM – Pepto

+0

中聲明的全局通知程序變量很好,它工作。但問題是我設置的通知按鈕和顯示通知按鈕不在同一個dom中。這意味着我的設置通知但顯示通知在不同視圖中,而不是在相同視圖中+ 1的幫助,並會接受它,如果你告訴我的方式 –