2012-12-22 75 views
3

SignalR wiki涵蓋了如何通過集線器之外的集線器進行廣播。然而,這種調用客戶端操作:如何從服務器調用SignalR集線器操作

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 
context.Clients.Group(group).addMessage(message); 

有沒有辦法來調用樞紐運行,最好是在一個強類型的方法嗎?例如

GetHubContext<MyHub>().Invoke(h => h.Say(message)) 

我知道這是可能通過連接到使用.NET客戶端的樞紐但這似乎錯了,當調用代碼是相同的服務器集線器上。

回答

1

沒有。這就像試圖從服務器端調用MVC控制器(你只是不這樣做)。只需將公共邏輯移入共享助手並從集線器和其他服務器端代碼中調用該助手即可。

+0

除了只有輪轂具有廣播到客戶端,以便將如何幫手,幫助的能力嗎?目前的方法要求班級知道客戶端操作,我寧願將其封裝在集線器中。 –

+1

Hub方法表示從客戶端到服務器的呼叫。當你處於hub方法的主體中時,你可以訪問從服務器到服務器沒有意義的東西(比如http請求和調用者的連接ID以及對調用者對象的訪問和其他事物)(使用MVC控制器比喻我認爲會澄清事情,但我錯了)。 至於你的另一點,顯然你沒有閱讀文件。滾動到底部https://github.com/SignalR/SignalR/wiki/Hubs,但感謝您的反饋。 – davidfowl

+0

我看過文檔,但顯然混淆了我的抽象。感謝澄清。 –

5

派對晚了,但是,是的,有。

stockticker sample nuget package做到這一點(雖然它並不能完全用它!):

基本上,你暴露在服務器端地帶進行鍼對呼叫的靜態實例。

在樣品上的圖案是:

public class StockTicker 
{ 
    // Singleton instance 
    private readonly static Lazy<StockTicker> _instance = new Lazy<StockTicker>(
     () => new StockTicker(GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>().Clients)); 

... 


    public static StockTicker Instance 
    { 
     get 
     { 
      return _instance.Value; 
     } 
    } 

...

然後,這是可以從任何地方和幾乎anywhen !:

StockTicker.Instance.OpenMarket(); 

同樣的例子被稱爲也被一篇博文所覆蓋asp.net site

相關問題