2014-07-25 9 views
10

Ich habe eine ASP.NET-Webanwendung mit einer einfachen HTML-Seite und etwas JavaScript für die Kommunikation über SignalR. Das funktioniert gut. Jetzt versuche ich, aus einem anderen Projekt eine Methode auf dem Hub zu nennen (in der gleichen Lösung) und durch den .NET Signalr Client-API verwendet:SignalR 2.1.0: Die Verbindung wurde nicht hergestellt

 var connection = new HubConnection("http://localhost:32986/"); 
     var hub = connection.CreateHubProxy("MessageHub"); 
     connection.Start(); 
     hub.Invoke("SendMessage", "", ""); 

Die letzte Zeile verursacht InvalidOperationException: The connection has not been established. Aber ich bin in der Lage zu verbinden zum Hub von meinem JavaScript-Code.

Wie kann ich mithilfe von C# -Code eine Verbindung zum Hub herstellen?

UPDATE

In dem Moment, diesen Beitrag nach dem Schreiben habe ich versucht, .Wait() hinzuzufügen und es funktionierte! So wird dies tun:

 var connection = new HubConnection("http://localhost:32986/"); 
     var hub = connection.CreateHubProxy("MessageHub"); 
     connection.Start().Wait(); 
     hub.Invoke("SendMessage", "", ""); 

Antwort

12

HubConnection.Start eine Task zurückgibt, bevor Sie eine Methode aufrufen kann, informiert zu sein.

Die beiden Möglichkeiten, dies zu tun, sind erwarten zu verwenden, wenn Sie in einer Asynchron-Methode sind, oder Task.Wait() zu verwenden, wenn Sie in einer nicht-Asynchron-Methode sind:

public async Task StartConnection() 
{ 
    var connection = new HubConnection("http://localhost:32986/"); 
    var hub = connection.CreateHubProxy("MessageHub"); 
    await connection.Start(); 
    await hub.Invoke("SendMessage", "", ""); 
    // ... 
} 

// or 

public void StartConnection() 
{ 
    var connection = new HubConnection("http://localhost:32986/"); 
    var hub = connection.CreateHubProxy("MessageHub"); 
    connection.Start().Wait(); 
    hub.Invoke("SendMessage", "", "").Wait(); 
    // ... 
} 

Die „Wie eine Verbindung herzustellen "Abschnitt der ASP.NET SignalR Hubs API Guide for the .NET client. geht noch mehr ins Detail.

+1

Dritte Option: 'ContinueWith'. Dies ist im Wesentlichen die Art und Weise, wie es auf der Client-Seite getan wird, also fügt es ein bisschen Konsistenz zwischen JS und C# Verwendungen hinzu. – Corey

Verwandte Themen