Exemplo do aplicativo SignalR Console

Existe um pequeno exemplo de um console ou aplicativo winform usando signalR para enviar uma mensagem para um hub .net ?. Eu tentei os exemplos de .net e olhei para o wiki, mas não faz sentido para mim a relação entre o hub (.net) e cliente (app console) (não foi possível encontrar um exemplo disso). O aplicativo só precisa do endereço e do nome do hub para se conectar ?.

Se alguém puder fornecer um pequeno pedacinho de código mostrando o aplicativo se conectando a um hub e enviando “Hello World” ou algo que o hub .net recebe ?.

PS. Eu tenho um exemplo de bate-papo hub padrão que funciona bem, se eu tentar atribuir um nome de hub em Cs para ele, ele pára de funcionar ou seja [HubName (“teste”)], você sabe a razão para isso?

Obrigado.

Código do aplicativo do console atual.

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

Servidor de Hub. (espaço de trabalho de projeto diferente)

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

Info Wiki para isso é http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client

    Primeiro de tudo, você deve instalar SignalR.Host.Self no aplicativo do servidor e SignalR.Client no seu aplicativo cliente por nuget:

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

    PM> Instalar Pacote Microsoft.AspNet.SignalR.Client

    Em seguida, adicione o seguinte código aos seus projetos;)

    (execute os projetos como administrador)

    Aplicativo do console do servidor:

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

    Aplicativo do console do cliente:

     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(); } } } 

    Exemplo para SignalR 2.2.1 (maio de 2017)

    Servidor

    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

    (quase o mesmo que a resposta de Mehrdad Bahrainy)

    Pacote de Instalação 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(); } } } 

    O Self-Host agora usa o Owin. Checkout http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host para configurar o servidor. É compatível com o código do cliente acima.