Gibt es ein kleines Beispiel für eine Konsole oder Winform-App, die signalR verwendet, um eine Nachricht an einen .net-Hub zu senden? Ich habe die .net-Beispiele ausprobiert und mir das Wiki angesehen, aber für mich ist die Beziehung zwischen Hub (.net) und Client (Konsolen-App) nicht sinnvoll (ich konnte kein Beispiel dafür finden). Benötigt die App nur die Adresse und den Namen des Hubs, um eine Verbindung herzustellen?
Wenn jemand einen kleinen Code bereitstellen könnte, der zeigt, wie die App eine Verbindung zu einem Hub herstellt und "Hello World" sendet oder etwas, das der .net-Hub empfängt?
PS. Ich habe ein Standard-Hub-Chat-Beispiel, das gut funktioniert. Wenn ich versuche, ihm einen Hub-Namen in Cs zuzuweisen, funktioniert es nicht mehr, dh [Hub-Name ("Test")]. Kennen Sie den Grund dafür?
Vielen Dank.
Aktueller Konsolen-App-Code.
static void Main(string[] args)
{
//Set connection
var connection = new HubConnection("http://localhost:41627/");
//Make proxy to hub based on hub name on server
var myHub = connection.CreateProxy("chat");
//Start connection
connection.Start().ContinueWith(task =>
{
if (task.IsFaulted)
{
Console.WriteLine("There was an error opening the connection:{0}", task.Exception.GetBaseException());
}
else
{
Console.WriteLine("Connected");
}
}).Wait();
//connection.StateChanged += connection_StateChanged;
myHub.Invoke("Send", "HELLO World ").ContinueWith(task => {
if(task.IsFaulted)
{
Console.WriteLine("There was an error calling send: {0}",task.Exception.GetBaseException());
}
else
{
Console.WriteLine("Send Complete.");
}
});
}
Hub-Server. (anderer Projektarbeitsbereich)
public class Chat : Hub
{
public void Send(string message)
{
// Call the addMessage method on all clients
Clients.addMessage(message);
}
}
Das Info-Wiki hierfür ist http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client
Antworten:
Zunächst sollten Sie SignalR.Host.Self in der Serveranwendung und SignalR.Client in Ihrer Clientanwendung per Nuget installieren:
Fügen Sie dann den folgenden Code zu Ihren Projekten hinzu;)
(Führen Sie die Projekte als Administrator aus.)
Serverkonsolen-App:
Client-Konsolen-App:
quelle
.On<T>()
Methodenaufrufe) hinzufügen müssen, bevor Sie dieconnection.Start()
Methode aufrufen .Beispiel für SignalR 2.2.1 (Mai 2017)
Server
Installationspaket Microsoft.AspNet.SignalR.SelfHost -Version 2.2.1
Klient
(fast das gleiche wie Mehrdad Bahrainy Antwort)
Installationspaket Microsoft.AspNet.SignalR.Client -Version 2.2.1
quelle
Der Self-Host verwendet jetzt Owin. Kasse http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host, um den Server einzurichten . Es ist mit dem obigen Client-Code kompatibel.
quelle
Dies ist für dot net core 2.1 - nach vielem Ausprobieren habe ich es endlich geschafft, einwandfrei zu funktionieren:
Dieser Code stammt vom Chat-Client eines typischen armen SignalR-Mannes. Das Problem, auf das ich und anscheinend viele andere Menschen gestoßen sind, besteht darin, eine Verbindung herzustellen, bevor versucht wird, eine Nachricht an den Hub zu senden. Dies ist wichtig, daher ist es wichtig, auf den Abschluss der asynchronen Aufgabe zu warten. Dies bedeutet, dass wir sie synchronisieren, indem wir auf den Abschluss der Aufgabe warten.
quelle