学习SignalR(一):搭建及简单通信

学习SignalR(一):搭建及简单通信



前言

1、环境:服务端使用 .net 7.0 WebAPI,客户端使用 Winform
2、我用的端口是5000,所以我的 WebAPI 地址是 http://localhost:5000/,如果部署到 IIS 服务,5000端口号需改成IIS配置的端口号
3、目的是为了了解 signalR 的客户端是如何连接、发送、接收等和服务端的发送消息


一、服务端

1.依赖注入服务,配置signalR路由

Program.cs:

...

builder.Services.AddSignalR();//注册SignalR

...

//signalR路由:http://localhost:5000/MyHub
app.MapHub<MyHub>("/MyHub"); //配置signalR路由(字符串里的不区分大小写)

app.Run();

2.创建MyHub,用作处理客户端 - 服务器通信的高级管道

MyHub.cs:

public class MyHub : Hub
{
    /// <summary>
    /// 连接SignalR
    /// </summary>
    /// <returns></returns>
    public override Task OnConnectedAsync()
    {
        Console.WriteLine($"{Context.ConnectionId}:已连接");
        return base.OnConnectedAsync();
    }
    /// <summary>
    /// 断开
    /// </summary>
    /// <param name="exception"></param>
    /// <returns></returns>
    public override Task OnDisconnectedAsync(Exception exception)
    {
        Console.WriteLine($"{Context.ConnectionId}:已断开");
        return base.OnDisconnectedAsync(exception);
    }


    /// <summary>
    /// 接收客户端发来的信息,并向客户端发送消息
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public Task SendTest(string str)
    {
        Console.WriteLine($"{Context.ConnectionId}客户端发来消息:{str}");
        return Clients.Caller.SendAsync("SendMessageTest", "好的,我已收到");
    }
}

二、客户端

1.安装包

Microsoft.AspNetCore.SignalR.Client


2.界面及代码

在这里插入图片描述


代码:
注:txtMessage.WriteLog(ex);为打印日志,是我自己封装的方法,也可以 MessageBox.Show()

public partial class FrmSignalRClient : Form
{
    public FrmSignalRClient()
    {
        InitializeComponent();
    }

    HubConnection connection;

    private void FrmSignalRClient_Load(object sender, EventArgs e)
    {
    	//这里的 url 就是 WebAPI 配置 signalR 的路由
        string url = "http://localhost:5000/MyHub";

        //创建连接对象
        connection = new HubConnectionBuilder().WithUrl(url).Build();

        //注册收到服务端数据的方法,此方法请转至服务端MyHub.cs中查看
        connection.On<string>("SendMessageTest", str =>
        {
            txtMessage.WriteLog($"来自服务器的消息:{str}");
        });

    }

    private void btnConnect_Click(object sender, EventArgs e)
    {
        try
        {
            //开始连接(必须放On后面,否则一连上,接收不到服务端发来的第一条消息)
            connection.StartAsync();
        }
        catch (Exception ex)
        {
            txtMessage.WriteLog(ex);
        }
    }
    private void btnSend_Click(object sender, EventArgs e)
    {
        string msg = txtSend.Text;
        connection.InvokeAsync("SendTest", msg);
    }

    private void btnStop_Click(object sender, EventArgs e)
    {
        connection.StopAsync();
    }
}

三、效果图

在这里插入图片描述


在这里插入图片描述


微软学习文档: 点击查看

如果有什么问题,欢迎提出

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值