2012-06-21 17 views
43

Esiste 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 guardato il wiki ma non ha senso per me la relazione tra l'hub (.net) e il client (console app) (non ho trovato un esempio di questo). L'app richiede solo l'indirizzo e il nome dell'hub da connettere ?.Esempio di app SignalR Console

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 i.e [HubName ("test")], ne conosci la ragione ?.

Grazie.

Codice 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. (Area di lavoro progetto diverso)

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

+0

O.K in realtà questo effettivamente lavorate solo pensato mi è stato sempre lo stesso risultato appena aggiunto alcuni punti di sosta e Console.Linea di lettura(); alla fine. Whoop !. – user685590

risposta

67

prima di tutto è necessario installare SignalR.Host.Self sull'applicazione server e SignalR.Client sulla vostra applicazione client NuGet:

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

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

Quindi aggiungere il seguente codice per i vostri progetti;)

(eseguire i progetti come amministratore) console

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

console di Client 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(); 
     } 
    } 
} 
+0

È possibile utilizzare il codice sopra nell'applicazione Windows, ma è davvero necessario ?! Non sono sicuro di cosa intendi, puoi avvisare in Windows in altri modi. –

+0

quali altri modi? Non funziona SignalR in WinForms? Il client – Kiquenet

+0

funziona con il server da 0.5.2 a 1.0.0-alpha2, ad es. Install-Package Microsoft.AspNet.SignalR.Client -version 1.0.0-alpha2 https://www.nuget.org/packages/Microsoft.AspNet.SignalR.Client/1.0.0-alpha2 (le versioni di Code e SignalR dovrebbero funzionare con .net 4.0 usando VS2010 SP1) stava cercando di capire perché non riuscivo a farlo funzionare, alla fine ho provato il client con le prime versioni di SignalR. –

7

Esempio per SignalR 2.2.1 (Maggio 2017)

Server

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

client

(quasi la stessa risposta di Mehrdad Bahrainy)

Installare-Pacchetto 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(); 
     } 
    } 
} 
Problemi correlati