我按照这个视频做了一个简单的 SignalR 实现。我在我的
builder.Services.AddSignalR();
类中添加了它对 Program.cs
的依赖。然后将 Map 添加到我的 CustomHub 中:app.MapHub<PublicChatHub>("public-chat");
这是我的中心课程
using Microsoft.AspNetCore.SignalR;
namespace WebAPI.SignalR;
public sealed class PublicChatHub : Hub
{
public override async Task OnConnectedAsync()
{
await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} connected.");
}
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("ReceiveMessage", message);
}
public override async Task OnDisconnectedAsync(Exception? exception)
{
await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} disconnected.");
}
}
当我尝试通过邮递员成功连接套接字调用
wss://localhost:7142/public-chat
但代码未在 OnConnectedAsync()
上命中我的断点时。
连接后发送此消息:
{
"protocol": "json,
"version": 1
}�
� 是 0x1E ascii。
我想与您分享一个基本的 signalR API。我对此进行了测试,它在我的本地工作。你可以这样尝试:
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
});
builder.Services.AddSignalR();
var app = builder.Build();
app.MapHub<ExampleHub>("/exampleHub");
app.Run();
}
}
和
public class ExampleHub : Hub
{
public async override Task OnConnectedAsync()
{
//debug
}
public async override Task OnDisconnectedAsync(Exception exception)
{
}
}
launchSettings.json中的iisSettings是这样的:
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3200",
"sslPort": 0
}
},
如果你无法连接这个项目,可能是你的客户端有问题。
连接网址:“http://localhost:3200/exampleHub”