c# - プログレス - SignalRコンソールアプリケーションの例




~/ signalr hubs (2)

Self-HostはOwinを使用するようになりました。 http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-hostをチェックしてサーバーをセットアップします。 上記のクライアントコードと互換性があります。

.netハブにメッセージを送信するためにsignalRを使用するコンソールやwinformアプリケーションの小さな例はありますか? 私はネットの例を試してみましたが、wikiを見てきましたが、ハブ(.net)とクライアント(コンソールアプリケーション)の関係はわかりません(例は見つかりませんでした)。 アプリケーションは接続するハブのアドレスと名前だけを必要としますか?

誰かがハブに接続し、 "Hello World"や.netハブが受け取ったものを送信していることを示す小さなコードを提供することができますか?

PS。 私はCsでハブ名を割り当てようとすると、うまく動作する標準のハブチャットの例を持っています。つまり、[HubName( "test")]の動作を停止します。

ありがとう。

現在のコンソールアプリケーションコード。

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

ハブサーバー。 (別のプロジェクトワークスペース)

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

この情報ウィキはhttp://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-clientですhttp://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client


SignalR 2.2.1の例(2017年5月)

サーバ

インストールパッケージ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);
            }
        }
    }
}

クライアント

(Mehrdad Bahrainyの回答とほぼ同じ)

インストールパッケージ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();
        }
    }
}






signalr