信号器C#客户端HUB连接。未启动

信号器C#客户端HUB连接。未启动,c#,signalr.client,asp.net-core-signalr,blazor-webassembly,C#,Signalr.client,Asp.net Core Signalr,Blazor Webassembly,我有一个ASPNet.Core WebApi,带有信号器。我有一个angular应用程序,它使用webAPI,我想用Blazor Webassembly应用程序替换它。Blazor应用程序中的信号器有问题 我创建了一个hubconnection,并对其进行了设置,当服务器发送数据时,不会调用hubconnection.On方法。这是我的密码: protected override async Task OnInitializedAsync() { _hubConnection = new

我有一个ASPNet.Core WebApi,带有信号器。我有一个angular应用程序,它使用webAPI,我想用Blazor Webassembly应用程序替换它。Blazor应用程序中的信号器有问题

我创建了一个hubconnection,并对其进行了设置,当服务器发送数据时,不会调用hubconnection.On方法。这是我的密码:

protected override async Task OnInitializedAsync()
{
    _hubConnection = new HubConnectionBuilder()
        .WithUrl("https://localhost:45299/hubs/accounthub", cfg =>
        {
            cfg.SkipNegotiation = true;
            cfg.AccessTokenProvider = () => Task.FromResult(token);
            cfg.Transports = HttpTransportType.WebSockets;
        })
        .Build();

    _hubConnection.On<IEnumerable<AccountResponse>>("accountschanged", (accounts) =>
    {
        foreach(var account in accounts)
        {
            Console.WriteLine(account.Name);
        }
    });
    await _hubConnection.StartAsync();
}

我终于找到了问题所在。这是关于序列化接收到的json消息。我必须添加
.AddJsonProtocol()
,并对其进行设置,以下是最终代码:

_hubConnection = new HubConnectionBuilder()
    .WithUrl("http://localhost:59225/hubs/accounthub", cfg =>
    {
        cfg.SkipNegotiation = true;
        cfg.Transports = HttpTransportType.WebSockets;
        cfg.AccessTokenProvider = () => Task.FromResult(token);
    })
    .AddJsonProtocol(cfg =>
    {
        var jsonOptions = new System.Text.Json.JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true,
        };
        jsonOptions.Converters.Add(new JsonStringEnumConverter());

        cfg.PayloadSerializerOptions = jsonOptions;
    })
    .Build();

我发现很奇怪,我没有收到任何错误消息。顺便说一句。

您在调用WithUrl时传入了一个值为“url”的字符串。我传递了正确的url,只是替换了它。如果url错误,我将不会收到任何消息。我将在帖子中对其进行编辑,以免混淆任何人。您是否可以将代码包含到在集线器方法上发布消息的任何内容中?我添加了服务器代码,以及从集线器收到的消息。在运行Blazor应用程序时,您是否在Visual Studio的“调试输出”窗口中看到任何错误?
{
    "type":1,
    "target":"accountschanged",
    "arguments":[
        [
            {
                "id":1,
                "name":"bank account 1"
            },
            {
                "id":2,
                "name":"wallet 1"
            }
        ]
    ]
}
_hubConnection = new HubConnectionBuilder()
    .WithUrl("http://localhost:59225/hubs/accounthub", cfg =>
    {
        cfg.SkipNegotiation = true;
        cfg.Transports = HttpTransportType.WebSockets;
        cfg.AccessTokenProvider = () => Task.FromResult(token);
    })
    .AddJsonProtocol(cfg =>
    {
        var jsonOptions = new System.Text.Json.JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true,
        };
        jsonOptions.Converters.Add(new JsonStringEnumConverter());

        cfg.PayloadSerializerOptions = jsonOptions;
    })
    .Build();