Esempio di app SignalR Console

C’è un piccolo esempio di console o app Winform utilizzando signalR per inviare un messaggio a un hub .net ?. Ho provato gli esempi .net e ho visto il wiki ma non ha senso per me la relazione tra l’hub (.net) e il client (app per console) (non ho trovato un esempio di questo). L’app richiede solo l’indirizzo e il nome dell’hub da connettere ?.

Se qualcuno potrebbe fornire un piccolo tidbit di codice che mostra l’app che si connette a un hub e invia “Hello World” o qualcosa che l’hub .net riceve ?.

PS. Ho un esempio di chat hub standard che funziona bene, se provo ad assegnare un nome hub in Cs ad esso, smette di funzionare cioè [HubName (“test”)], ne conosci la ragione ?.

Grazie.

Codice app della console corrente.

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

Server Hub. (spazio di lavoro diverso per il progetto)

 public class Chat : Hub { public void Send(string message) { // Call the addMessage method on all clients Clients.addMessage(message); } } 

Info Wiki per questo è http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client

    Prima di tutto, dovresti installare SignalR.Host.Self sull’applicazione server e SignalR.Client sull’applicazione client di nuget:

    PM> Install-Package SignalR.Hosting.Self -Version 0.5.2

    PM> Pacchetto di installazione Microsoft.AspNet.SignalR.Client

    Quindi aggiungi il seguente codice ai tuoi progetti;)

    (esegui i progetti come amministratore)

    App della console del server:

     using System; using SignalR.Hubs; namespace SignalR.Hosting.Self.Samples { class Program { static void Main(string[] args) { string url = "http://127.0.0.1:8088/"; var server = new Server(url); // Map the default hub url (/signalr) server.MapHubs(); // Start the server server.Start(); Console.WriteLine("Server running on {0}", url); // Keep going until somebody hits 'x' while (true) { ConsoleKeyInfo ki = Console.ReadKey(true); if (ki.Key == ConsoleKey.X) { break; } } } [HubName("CustomHub")] public class MyHub : Hub { public string Send(string message) { return message; } public void DoSomething(string param) { Clients.addMessage(param); } } } } 

    App della console client:

     using System; using SignalR.Client.Hubs; namespace SignalRConsoleApp { internal class Program { private static void Main(string[] args) { //Set connection var connection = new HubConnection("http://127.0.0.1:8088/"); //Make proxy to hub based on hub name on server var myHub = connection.CreateHubProxy("CustomHub"); //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(); 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(task.Result); } }); myHub.On("addMessage", param => { Console.WriteLine(param); }); myHub.Invoke("DoSomething", "I'm doing something!!!").Wait(); Console.Read(); connection.Stop(); } } } 

    Esempio per SignalR 2.2.1 (maggio 2017)

    server

    Install-Package Microsoft.AspNet.SignalR.SelfHost -Version 2.2.1

     [assembly: OwinStartup(typeof(Program.Startup))] namespace ConsoleApplication116_SignalRServer { class Program { static IDisposable SignalR; static void Main(string[] args) { string url = "http://127.0.0.1:8088"; SignalR = WebApp.Start(url); Console.ReadKey(); } public class Startup { public void Configuration(IAppBuilder app) { app.UseCors(CorsOptions.AllowAll); app.MapSignalR(); } } [HubName("MyHub")] public class MyHub : Hub { public void Send(string name, string message) { Clients.All.addMessage(name, message); } } } } 

    Cliente

    (quasi la stessa risposta di Mehrdad Bahrainy)

    Install-Package Microsoft.AspNet.SignalR.Client -Version 2.2.1

     namespace ConsoleApplication116_SignalRClient { class Program { private static void Main(string[] args) { var connection = new HubConnection("http://127.0.0.1:8088/"); var myHub = connection.CreateHubProxy("MyHub"); Console.WriteLine("Enter your name"); string name = Console.ReadLine(); connection.Start().ContinueWith(task => { if (task.IsFaulted) { Console.WriteLine("There was an error opening the connection:{0}", task.Exception.GetBaseException()); } else { Console.WriteLine("Connected"); myHub.On("addMessage", (s1, s2) => { Console.WriteLine(s1 + ": " + s2); }); while (true) { string message = Console.ReadLine(); if (string.IsNullOrEmpty(message)) { break; } myHub.Invoke("Send", name, message).ContinueWith(task1 => { if (task1.IsFaulted) { Console.WriteLine("There was an error calling send: {0}", task1.Exception.GetBaseException()); } else { Console.WriteLine(task1.Result); } }); } } }).Wait(); Console.Read(); connection.Stop(); } } } 

    L’Self-Host ora usa Owin. Effettuare il checkout http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host per configurare il server. È compatibile con il codice cliente sopra.