Server端不再做介绍,可以参照微软Doc文档的SignalR入门教程。
服务端代码
首先创建一个Hub集线器
public class ChatHub : Hub
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace DataSystem.Hubs
{
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override Task OnConnectedAsync()
{
return base.OnConnectedAsync();
}
}
}
.Net Core 5.0 版本的SignalR 路由配置在
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chatHub");
客户端的SignalR初始连接代码
string url = "http://localhost:6163/chatHub";
connection = new HubConnectionBuilder()
.WithUrl(url)
.AddMessagePackProtocol()
.Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
var newMessage = $"[{DateTime.Now.ToString()}]{user}: {message}";
ShowMsg(newMessage);
});
connection.StartAsync();
connection.InvokeAsync("SendMessage", nametx.Text, "登录服务器");
发送按钮的动作事件
private void button5_Click(object sender, EventArgs e)
{
connection.InvokeAsync("SendMessage", nametx.Text, sendtx.Text);
}
服务端测试结果如下
本案例的重点内容
服务端和客户端采用的SignalR依赖项必须要同一个版本,否则连接将会报404!!
服务端NuGet依赖项:
客户端NuGet依赖项: