3

私はsignalRの新しい1.0alpha2リリースで遊んでいます。ASP.NETアプリケーションの外部にSignalRサーバーを実装したいと思います。2つのコンソールアプリケーションが相互に通信できるようにします。

古い0.5.3バージョンでは、「Install-PackageSignalR.Hosting.Self」を次のように実行できました。

var server = new Server("http://127.0.0.1:8088/");

しかし、新しい1.0alpha2リリースでは、このNuGetパッケージをインストールできません...

誰かが私にリンクまたは1.0alpha2リリースに基づく2つのコンソールアプリケーションの実用的なミニ例を教えてもらえますか?(私は古い0.5.3の例だけが機能していないことを見つけることができます...)。


Ok。だから私はあなたの指示に従いました。今:

私のクライアントコンソール:

class Programm 
{
  static void Main(string[] args) 
  {
    var connection = new HubConnection("http://localhost/");
    IHubProxy myHub = connection.CreateHubProxy("MyHub");
    connection.Start().ContinueWith(task =>
      {
          if (task.IsFaulted)
              Console.WriteLine("No Connection: " + task.Exception.GetBaseException());
          else
              Console.WriteLine("Connected!");
      });

    myHub.Invoke("Send");

    Console.ReadLine(); // wait...
  }
}

そして、これが私のサーバーコンソールです。

class Program : Hub
{
  static void Main(string[] args)
  {
      Console.ReadKey();
  }
  public void Send(string message)
  {
      Debug.WriteLine("Server Method [send] was called");
      Console.WriteLine("Server Method [send] was called");
  }
}

しかし、これはナンセンスだと思います...

4

1 に答える 1

4

SignalR が公式になったので、新しい NuGet パッケージを使用する必要があります: (ASP と言いますが、.NET アプリケーションでも使用されます)。

Install-Package Microsoft.AspNet.SignalR -preサーバ

Install-Package -pre Microsoft.AspNet.SignalR.Clientクライアント

ここにはビルド済みのサンプル アプリケーションもあります。これを使用して、コンソール アプリケーションをテスト用にフックできます。

Install-Package Microsoft.AspNet.SignalR.Sample

クライアントの使用; 2 つのコンソール アプリケーションを接続する場合、一方はハブをホストする必要があり、もう一方はホストを指すクライアント接続を使用する必要があります。

必要な情報はすべて、このクライアント wiki にあります:リンク


編集

サーバー: (セルフホストを使用)

class Program
{
    static void Main(string[] args)
    {
        string url = "http://localhost:8081/";
        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;
            }
        }
    }

    public class MyHub : Hub
    {
        public void Send(string message)
        {
            Clients.All.addMessage(message);

        }
    }

}

クライアント:

class Program
{
    static void Main(string[] args)
    {
        var connection = new HubConnection("http://localhost:8081/");

        IHubProxy proxy = connection.CreateHubProxy("MyHub");

        connection.Start().Wait();

        proxy.On("addMessage", data => { Console.WriteLine("From Server: " + data); });

        while (true)
        {
            proxy.Invoke("Send", Console.ReadLine());
        }

    }
}

ここに画像の説明を入力

PS。以下のコメントで両方のソリューションにダウンロードを追加してください。きっとこれからも元気で。

于 2012-11-22T13:52:51.953 に答える