2013-04-23 5 views
6

Ich habe zwei Projekte in meiner Lösung:SignalR - Ausstrahlung über einen Hub in einem anderen Projekt von außerhalb eines Hubs

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

Ich versuche, einen Anruf zu meinem SignalRChat Hub von meinem Windows-Dienst und es zu machen scheint nicht zu funktionieren. Diese

ist, wo ich meine Hub von meinem Windows-Dienst aufrufen (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); 
    } 

ich die folgende Fehlermeldung erhalten, wenn sie versuchen, eine Verbindung:

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

bis ich versuche, Verbindung über var connection = new HubConnection("http://localhost:2129");

Port 2129 ist, was mein MVC-Projekt läuft.

Antwort

15

Dies funktioniert nur, soweit ich weiß, wenn Sie den Hub von der Webanwendung aus aufrufen.

Um mit dem Hub von außerhalb der Webanwendung zu interagieren, z.B. von einem Windows-Dienst, müssen Sie bei den SignalR Client Hubs documentation

  1. Fügen Sie das folgende NuGet Paket zu einem Projekt einen Blick nehmen: Microsoft.AspNet.SignalR.Client

  2. Fügen Sie die folgende Anweisung an dem oberen Rand der Seite: using Microsoft.AspNet.SignalR.Client;

  3. Sie müssten eine Verbindung zum Hub erstellen und dann die Verbindung starten.


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"); 

In Ihrem Hub würden Sie dann brauchen ein Verfahren zum AddNewMessageToPage haben, die die Zeichenfolge Hallo Welt akzeptiert und von hier aus anrufen Clients.All.addNewMessageTopage(message)

+0

hatte ich einen Tippfehler auf meinem side..incorrect Hubname "MyHub". Sobald ich es zu meinem tatsächlichen Hub-Namen geändert habe, hat es gut funktioniert. Vielen Dank. – Mithrilhall

+0

Ja, ich habe gerade den Code aus den SignalR-Dokumenten genommen. –

+0

Das war genau das, was ich gesucht habe, danke! :-) – xan

Verwandte Themen