Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SignalR Console app example

Tags:

c#

signalr

Is there a small example of a console or winform app using signalR to send a message to a .net hub?. I have tried the .net examples and have looked at the wiki but it is not making sense to me the relationship between the hub(.net) and client(console app) (could not find an example of this). Does the app just need the address and name of hub to connect?.

If someone could provide a small tidbit of code showing the app connecting to a hub and sending "Hello World" or something that the .net hub receives?.

PS. I have a standard hub chat example which works well , if I try to assign a hub name in Cs to it , it stops working i.e [HubName("test")] , do you know the reason for this?.

Thanks.

Current Console 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. (different project workspace)

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

Info Wiki for this is http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client

like image 383
user685590 Avatar asked Jun 21 '12 14:06

user685590


People also ask

What is SignalR example?

SignalR can be used to add any sort of "real-time" web functionality to your ASP.NET application. While chat is often used as an example, you can do a whole lot more. Any time a user refreshes a web page to see new data, or the page implements long polling to retrieve new data, it is a candidate for using SignalR.

How do I send client specific messages using SignalR?

We change the BroadcastChartData() method to accept connectionId as an additional parameter. This way, we can find the client using the connectionId and send a message just to that client. Additionally, we add a new GetConnectionId() method, which returns the connectionId of the client.


1 Answers

First of all, you should install SignalR.Host.Self on the server application and SignalR.Client on your client application by nuget :

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

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

Then add the following code to your projects ;)

(run the projects as administrator)

Server console app:

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

Client console app:

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();         }     } } 
like image 97
Mehrdad Bahrainy Avatar answered Sep 23 '22 18:09

Mehrdad Bahrainy