2012-11-23 34 views
2

嗨我有一個問題,我的signalR客戶端在一個組中沒有得到發送的信息。SignalR羣組沒有獲取數據

我試過這兩種方式,兩個都不工作。

在加載的網頁上,客戶端將調用服務器來獲取組名,然後調用集線器上的方法來加入該組中的用戶。

的JavaScript .....

 var connectionOpen = false; 
     var myHub; 
     $(function() { 
      myHub = $.connection.myHub; 
      myHub.client.showMessage = alertMessage; 
      $.connection.hub.start(function() { 
       connectionOpen = true; 
       joinGroup(); 
      }); 
     }); 

     function joinGroup() { 
      $.ajax({ 
       url: 'Controller/GetGroupName, 
       type: 'POST', 
       success: function (group) { 
        if (connectionOpen == true) 
         tileHub.server.joinGroup(group); 
       } 
      }); 
     } 

function alertMessage(string value){ 
alert(value); 
} 

控制器

[HttpPost] 
public JsonResult GetGroupName() 
{ 
    return Json("Foo"); 
} 

myHub

public void JoinGroup(string groupName) 
{ 
    Groups.Add(Context.ConnectionId, groupName); 
} 

我已經通過代碼無數次踩,我可以看到我連接OK並加入該組,但當我嘗試併發回組時,什麼也沒有發生

我用這從我的控制器

GlobalHost.ConnectionManager.GetHubContext<myHub>().Clients.Group("Foo").showMessage("Hello"); 

這是我已經嘗試了第二種方式發送到組,我也試圖從輪轂,但仍然沒有喜悅發送到組。

任何幫助,將不勝感激......

更新 此問題已修復感謝大衛·福勒....

這是一個錯誤,由於這樣的事實,我給了使用HubName屬性集線器使用不同的名稱,然後使用longPolling傳輸器傳輸signalR。刪除該屬性可以讓他們知道工作。一個修復程序也已經提供了,請參閱https://github.com/SignalR/SignalR/issues/1039

回答

3

幾件事情:

  1. 請務必閱讀這個帖子上的「重新加入組」一節。 http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx
  2. 你真的需要做一個Ajax調用來從服務器中找出組名嗎?你不能直接在頁面中呈現它嗎?
  3. 如果您在任何地方將「Foo」硬編碼爲組名,它會失敗嗎?
+0

感謝您的回覆。我已經閱讀了有關重新加入組的信息,並將EnableAutoRejoiningGroups()添加到Global中,但沒有任何更改。我需要通過ajax呼叫讓他們離開,並在會話中重新加入不同的組,以便他們處於活動狀態。我已經測試了對組Foo繞過服務器調用的硬編碼,結果相同。我在另一個項目中創建了一個工作示例,但是我不能爲我的生活找出兩者之間的區別。 – jclarkson

+0

經過另一天的調查後,我發現我創建的工作示例項目與我遇到問題的示例項目之間的區別在於後者使用傳輸協議 - longpolling。如果我改變工作項目中使用長輪詢,我得到了相同的結果(無一組由成員接收的呼叫)。這是設計還是錯誤?我試圖強制違規項目使用websockets,但它只是默認回到長輪詢。 – jclarkson

+1

這就是爲什麼我提出了EnableAutoRejoiningGroups,這是不同的,博客文章詳細描述了這是爲什麼。 – davidfowl