selfhost mvc hubconnection app c# signalr

c# - hubconnection - signalr mvc



Ejemplo de la aplicaciĆ³n SignalR Console (3)

¿Hay algún pequeño ejemplo de una consola o aplicación winform que utilice signalR para enviar un mensaje a un .net hub ?. He probado los ejemplos .net y he mirado el wiki pero no tiene sentido para mí la relación entre el hub (.net) y el cliente (aplicación de consola) (no pude encontrar un ejemplo de esto). ¿La aplicación solo necesita la dirección y el nombre del concentrador para conectarse ?.

Si alguien pudiera proporcionar un pequeño tidbit de código que muestre la aplicación que se conecta a un concentrador y envía "Hello World" o algo que el .net hub recibe ?.

PD. Tengo un ejemplo estándar de concentrador de chat que funciona bien, si intento asignarle un nombre de cubo en Cs, deja de funcionar, es decir, [HubName ("test")], ¿conoce el motivo?

Gracias.

Código de la aplicación de consola actual.

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 Hub (espacio de trabajo de proyecto diferente)

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

Wiki de información para esto es http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client


Ejemplo para SignalR 2.2.1 (mayo 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

(casi lo mismo que Mehrdad Bahrainy respuesta)

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<string, string>("addMessage", (s1, s2) => { Console.WriteLine(s1 + ": " + s2); }); while (true) { string message = Console.ReadLine(); if (string.IsNullOrEmpty(message)) { break; } myHub.Invoke<string>("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(); } } }



En primer lugar, debe instalar SignalR.Host.Self en la aplicación del servidor y SignalR.Client en su aplicación cliente por nuget:

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

PM> Install-Package Microsoft.AspNet.SignalR.Client

A continuación, agregue el siguiente código a sus proyectos;)

(ejecuta los proyectos como administrador)

Aplicación de la consola del 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); } } } }

Aplicación de consola del 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<string>("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<string>("addMessage", param => { Console.WriteLine(param); }); myHub.Invoke<string>("DoSomething", "I''m doing something!!!").Wait(); Console.Read(); connection.Stop(); } } }