信号器C#客户端HUB连接。未启动
我有一个ASPNet.Core WebApi,带有信号器。我有一个angular应用程序,它使用webAPI,我想用Blazor Webassembly应用程序替换它。Blazor应用程序中的信号器有问题 我创建了一个hubconnection,并对其进行了设置,当服务器发送数据时,不会调用hubconnection.On方法。这是我的密码:信号器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
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();