2012-02-19 116 views
4
發送消息時爲null

我在我的MVC應用程序下面的樞紐,從這裏我想發送一個簡單的消息,我的客戶端代碼:客戶端嘗試通過signalR

using SignalR.Hubs; 

public class Progress : Hub 
     { 
      public void 

Send(string message) 
      { 
       // Call the addMessage method on all clients 
       Clients.addMessage(message); 
      } 

      public Progress() 
      { 
       Clients.addMessage("Starting to analyze image"); 
      }     
     } 

而在下面的JavaScript我的看法

<script src="/Scripts/jquery.signalR.js" type="text/javascript"></script> 
<script src="/signalr/hubs" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(document).ready(function() { 

     // Proxy created on the fly 
     var connection = $.connection('/signalr/hubs/progress'); 

     // Declare a function on the chat hub so the server can invoke it 
     connection.addMessage = function (message) { 
      $('#messages').append('<li>' + message.Content + '</li>'); 
     }; 


     // Start the connection 
     connection.start(); 
    }); 
</script> 
} 

我的問題是,當代碼調用構造函數,或與此有關的發送方法,將客戶對象爲null。

當我調試客戶端代碼時,一切看起來都不錯。/signalr/hubs/route返回javascript代碼,並且在運行javascript時沒有錯誤。

我可以補充說,後端代碼運行在Umbraco 5 CMS環境之上,我不確定是否會造成任何干擾。

關於如何調試/解決此問題的任何建議?

回答

4

這聽起來像你試圖通過實例化集線器從服務器端代碼廣播消息。不幸的是,它不能這樣工作。您可以在這裏看到如何從服務器端發送消息的示例:https://github.com/SignalR/SignalR/wiki/Hubs。查看「從Hub外部通過Hub進行廣播」部分。

下面將要在其中從

using SignalR.Infrastructure; 

string message = "Test Message"; 
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
dynamic clients = connectionManager.GetClients<MyHub>(); 
clients.addMessage(message); 

做廣播然而,這是你Send()方法匹配,如果你想設置,你可能只需要發送郵件進度指示器的服務器端使用給來電者。在這種情況下,您需要將Progress方法更新爲Caller.addMessage("Starting to analyze image");。要從集線器外部執行此操作會有點棘手,因爲您需要跟蹤要更新的連接的客戶端ID。一旦您知道上述更改爲:

clients[clientId].addMessage(message); 
+0

這是國際奧委會我錯過的東西。謝謝 – 2012-02-20 19:35:02

+0

請注意,AspNetHost已更改爲GlobalHost(在SignalR.Hosting.Common中定義)。 GlobalHost.ConnectionManager.GetHubContext ();爲我工作。 – 2012-06-28 07:11:52