客户端未通过SignalR接收集线器推送

时间:2019-04-23 20:26:32

标签: c# asp.net-core signalr

我有以下枢纽:

public class MyHub : Hub
{
    public static HubLifetimeManager<MyHub> HubManager { get; private set; }
    public MyHub(HubLifetimeManager<MyHub> hubManager)
    {
        HubManager = hubManager;
    }

    public string SayHello()
    {
        return "hello! " + DateTime.UtcNow;
    }
}

我会定期推送事件,像这样:

private static void TickTimer(object State)
{
    var Time = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture);
    var A = MyHub.HubManager;
    if (A != null)
    {
        A.SendAllAsync("Update", new object[] { Time });
    }
}

在客户端,我执行以下代码:

        var Connection = new HubConnectionBuilder()
            .WithUrl("http://localhost:8000/myhub")
            .Build();

        Connection.On("Update", () => Console.WriteLine("Update")); DOESN'T WORK
        Connection.On("Update", (object[] O) => Console.WriteLine("AA")); DOESN'T WORK EITHER

        var StartAsync = Connection.StartAsync();
        StartAsync.Wait();

我想念什么?


更新:

我添加了日志记录,发现了这一点:

  

无法绑定在“更新”的调用“(空)”中收到的参数。   System.IO.InvalidDataException:调用提供1个参数,但目标期望0。      在Microsoft.AspNetCore.SignalR.Protocol.JsonHubProtocol.BindArguments(JsonTextReader reader,IReadOnlyList`1 paramTypes)

问题很简单,就是参数列表不一样。但是除非打开日志记录,否则SignalR只会吞没错误,并且看不到任何内容。

2 个答案:

答案 0 :(得分:0)

尝试一下:

  Connection.On<object[]>("Update", (data) =>
            {
                Console.WriteLine("AA");
                //TO DO
            });

答案 1 :(得分:0)

请注意,您只发送一个参数

  

A.SendAllAsync(“ Update”,新对象[] {时间});

因此,我将On()更改为以下内容:

Connection.On<DateTime>("Update", (s) => Console.WriteLine("AA"+s.ToString()));

对我来说很好

enter image description here