web-dev-qa-db-ja.com

SignalR 2.0.NETコンソールクライアント

サーバーコンソールアプリがあります。

    static void Main(string[] args)
    {
        string url = "http://localhost:8080";
        using (WebApp.Start(url))
        {
            MyHub hub = new MyHub();
            Console.WriteLine("Server running on {0}", url);
            var key = Console.ReadLine();
            while (key != "quit")
            {
                hub.Send("Server", key);
            }
        }
    }

public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        context.Clients.All.addMessage(name, message);
    }
}
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}

そして私の.NETクライアントアプリ

    static void Main(string[] args)
    {

        MainAsync().Wait();
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        try
        {

            var hubConnection = new HubConnection("http://localhost:8080/");
            //hubConnection.TraceLevel = TraceLevels.All;
            //hubConnection.TraceWriter = Console.Out;
            IHubProxy hubProxy = hubConnection.CreateHubProxy("MyHub");
            hubProxy.On("addMessage", data =>
                {
                    Console.WriteLine("Incoming data: {0} {1}", data.name, data.message);
                });
            ServicePointManager.DefaultConnectionLimit = 10;
            await hubConnection.Start();

        }
        catch (Exception ex)
        {

        }
    }

クライアントの実行時にエラーは発生しません。ただし、コンソールには何も出力されません。

これらの2行のコメントを外すと:

hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;

コンソールでいくつかのトレース出力を見ることができます

07:56:28.0121460 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,0|C,0|D,1|E,0","S":1,"M":[]})
07:56:28.0277722 - 355ca933-de49-400b-b859-c9dde6361151 - ChangeState(Connecting
, Connected)
07:56:33.4655493 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({"C":"d-
69A14839-B,1|C,0|D,1|E,0","M":[{"H":"MyHub","M":"addMessage","A":["Server","Hello World"]}]}
)
07:56:37.9657773 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})
 07:56:47.9975354 - 355ca933-de49-400b-b859-c9dde6361151 - WS: OnMessage({})

「Server」と「HelloWorld」はサーバーから送信されているメッセージなので、クライアントがメッセージを受信して​​いると思います。おそらく、コンソールに間違った方法で出力しているだけです。

誰か助けてもらえますか?

追加情報:MVCアプリケーションでメッセージを正常に受信できます。

11
Null Reference

このようにhubProxyイベントハンドラーを宣言するべきではありませんか?

hubProxy.On<string, string>("Send", (name, message) => 
{
   Console.WriteLine("Incoming data: {0} {1}", name, message);
});
12
David Brabant