2013-04-23 18 views
6

Ho due progetti nella mia soluzione:SignalR - Broadcasting nel corso di un hub in un altro progetto al di fuori di un hub

Project 1: "SignalRChat" (MVC) - Works fine
Project 2: "DatabaseWatcherService" Windows Service - Works fine

Sto cercando di fare una chiamata al mio Hub SignalRChat dal mio servizio di Windows ed è non sembra funzionare.

Questo è dove io chiamo il mio Hub dal mio servizio di Windows (https://github.com/SignalR/SignalR/wiki/Hubs#broadcasting-over-a-hub-from-outside-of-a-hub):

void PerformTimerOperation(object sender, EventArgs e) 
    { 
     eventLog1.WriteEntry("Timer ticked..."); 

     var message = "test"; 

     var context = GlobalHost.ConnectionManager.GetHubContext<SignalRChat.ChatHub>(); 
     context.Clients.All.addNewMessageToPage(message); 
    } 

sto ottenendo il seguente errore quando si tenta di connettersi:

Message=The remote server returned an error: (500) Internal Server Error.

sto cercando di connettersi via var connection = new HubConnection("http://localhost:2129");

La porta 2129 è il progetto su cui è in esecuzione il mio progetto MVC.

risposta

15

Questo funzionerà solo, per quanto ne so, quando si chiama l'hub dall'interno dell'applicazione Web.

Per interagire con l'hub dall'esterno dell'applicazione Web, ad es. da un servizio di Windows, è necessario dare un'occhiata al SignalR Client Hubs documentation

  1. Aggiungere il seguente pacchetto NuGet al progetto: Microsoft.AspNet.SignalR.Client

  2. Aggiungere la seguente dichiarazione alla parte superiore della pagina: using Microsoft.AspNet.SignalR.Client;

  3. È necessario creare una connessione all'hub e quindi avviare la connessione.


var connection = new HubConnection("http://mysite/"); 
IHubProxy myHub = connection.CreateHubProxy("MyHub"); 

connection.Start().Wait(); // not sure if you need this if you are simply posting to the hub 

myHub.Invoke("addNewMessageToPage", "Hello World"); 

Nel vostro hub Si sarebbe quindi bisogno di avere un metodo per AddNewMessageToPage che accetta la stringa ciao mondo e da qui chiamare Clients.All.addNewMessageTopage(message)

+0

ho avuto un errore di battitura sul mio side..incorrect Nome dell'hub "MyHub". Una volta che l'ho cambiato con il mio vero nome Hub, ha funzionato bene. Grazie. – Mithrilhall

+0

Sì, ho appena preso il codice dai documenti SignalR. –

+0

Questo era esattamente quello che stavo cercando, grazie! :-) – xan

Problemi correlati