2012-08-24 147 views
0

我有一個MVC 3,VB.NET,Razor應用程序,它使用SignalR進行聊天和系統消息系統......該聊天工作完美無缺,但我希望能夠添加一個功能在我的管理控制器將消息發送到集線器在集線器然後做正常的事情,如果JavaScript的已經從一個視圖稱之爲...轂設置如下:從Controller發送消息到SignalR Hub

Imports SignalR.Hubs 
Imports SignalR 

Namespace SingalRTest 
Public Class Chat 
    Inherits Hub 
    Public Sub Send(ByVal clientName As String, ByVal message As String) 
     'Call the addMessage method on all clients. 
     Clients.addMessage(clientName, message) 
    End Sub 

End Class 
End Namespace 

我想到只是使用新的,但不會工作,因爲據我所知,集線器的實例必須保持完好..

我想要做的是這樣的事情:

Public Function notification(ByVal systemMessage as string) 
     Dim y As SingalRTest.Chat = Nothing 
     y.Send(User.Identity.Name.ToString, systemMessage) 
     Return RedirectToAction("Index", "Admin") 
End Function 

這不會在所有的工作和錯誤說:

Object reference not set to an instance of an Object 

當它到達y.Send線...

回答

3

哇,這花了很多挖找到在網上。我只是需要在我中心類,現在看起來像這樣添加共享分:

Imports SignalR.Hubs 
Imports SignalR 

Namespace SingalRTest 

Public Class Chat 
    Inherits Hub 
    Public Sub Send(ByVal clientName As String, ByVal message As String) 
     'Call the addMessage method on all clients. 
     Clients.addMessage(clientName, message) 
    End Sub 
    Friend Shared Sub SendMessage(message As String) 
     Dim context As IHubContext = GlobalHost.ConnectionManager.GetHubContext(Of Chat)() 
     context.Clients.addMessage("System Message", message) 
    End Sub 
End Class 

End Namespace 

那麼只要我想在窗口發送通知,我只想放棄這一代碼的控制器功能調用所有客戶端上的addMessage方法:

SingalRTest.Chat.SendMessage("Testing Only") 

也許這會幫助別人。

+2

請注意,您不需要在集線器本身執行此操作,您可以從代碼中的任何地方調用'GlobalHost.ConnectionManager.GetHubContext'。這在[SignalR Wiki](https://github.com/SignalR/SignalR/wiki/Hubs)(「從Hub外部通過Hub進行廣播」)中有記錄。 –

相關問題