SignalR-WPF实时应用程序

4 篇文章 0 订阅

SignalR是Microsoft用于开发实时应用程序的流行服务之一,它基于以下原理:客户端通过向Web应用程序发送异步(异步)通知进行通信。

.Net客户端在ASP.NET Core和AndroidOS(客户端)上的javaScript支持的平台上运行。

iOS和c ++有非官方的增强功能。希望在SignalR文档中提供官方支持。

 

目的

让我们使用.NET CORE和SignalR实现一个实时聊天应用程序。

服务器端

让我们从在.NET端安装带有ASP.NET Core的SignalR服务开始。正式文件中对以下之前的SignalR hub进行了说明。

SignalR集线器API允许您从服务器的已连接客户端调用方法。在服务器代码中,定义客户端调用的方法。在客户端代码中,您定义从服务器调用的方法。SignalR在后台处理所有事务,从而实现了客户端与服务器之间的实时通信以及服务器与客户端之间的实时通信。

SignalR集线器是我们确定客户端将传输的数据结构和规则的结构。

在此应用程序中,我们将实现数据,然后客户端和服务器将从服务器转到所有客户端

设置

在服务器端,在.NET Core for NuGet上安装SignalR库。

Microsoft.AspNetCore.SignalR.Core

创建集线器结构。

让我们继承SignalR库提供的Hub抽象类。

namespace Server.Hubs
{
    public class ChatHub : Hub
    {
        [HubMethodName("sendMessage")]
        public void SendMessage(MessageDto messageDto)
        {
            messageDto.ConnectionId = Context.ConnectionId;
            Clients.All.SendAsync("messages", messageDto);
        }

        public override async Task OnConnectedAsync()
        {
            await base.OnConnectedAsync();
        }

        public override async Task OnDisconnectedAsync(Exception exception)
        {
            await base.OnDisconnectedAsync(exception);
        }
    }
}

 

在这里,

  • SendMessage方法将所有要接收的消息对象的客户端发送给客户端,并建立所有连接。全部将使用.SendAsync发送,其中“ 全部”方法将覆盖连接到集线器的所有客户端。该消息将发送给所有客户端,包括有效地发送定义为All的消息,并且我们将使用“ messages”标签侦听客户端上所有已发送的消息。

您还可以使用 AllExcept,客户端,客户端,组,GroupExcept,组,用户,用户类型。这些类型包括对要传输的客户端的过滤。

例如,您将仅与特定的connectId通信。因此,您可以使用Client(connectionId)与一个人进行通信

或者,您可以使用客户端(connectionIds)打开一个会议室,只有连接到该会议室的客户端才能进行通信。使用Group(groupName),可以进行配置,例如与组中的客户端通信。

配置

让我们对启动文件进行signalR定义。在这里,我们定义了名为“ chatHub ”的中心类。

链接: http:// localhost / chatHub

 public class Startup
 {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSignalR();
            ...
        }

        public void Configure(IApplicationBuilder app, IHostEnvironment env)
        {
            ...
            app.UseSignalR(routes =>
            {
                routes.MapHub<ChatHub>("/chatHub");
            });
        }
}

 

用户认证

让我们谈谈在用户验证过程中可能有用的一些要点。

在服务器端,用户定义的JWT可以通过使用Claims定义给用户分配令牌,从而为服务器端验证分配权限。

执行此操作后。通过将[Authorize]符号添加到集线器类,您可以通过指定必须对服务访问已验证的请求以及通过使用Claims接收userID信息来执行特定于用户的操作。

您可以通过将客户端上身份验证所需的令牌信息添加到标头来发出连接请求。

_hubConnection = new HubConnectionBuilder()
                .WithUrl("https://localhost/connectionHub", options =>
                {
                    options.Headers["Authorization"] = "Bearer " + token;
                })
                .Build();

应用

您可以在简单的级别上检查以下使用.NET CORE API(服务器)和WPF(客户端)开发的项目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)窗体应用程序是使用微软的.NET框架开发的一种桌面应用程序。UDP(User Datagram Protocol)通讯是一种面向无连接的网络通信协议,具有低延迟和高效率的特点。在WPF窗体应用程序中使用UDP通讯框架可以实现实时数据传输和通信。 在WPF窗体应用程序中,我们可以使用.NET框架中的System.Net命名空间提供的相关类来实现UDP通讯功能。首先,我们需要创建一个UDPClient对象来作为通讯的接口,通过指定远程主机和端口号来初始化该对象。然后,我们可以使用UDPClient提供的方法来收发UDP数据报,如Send方法用于发送数据报,Receive方法用于接收数据报。 在WPF窗体应用程序中,我们可以通过UI线程和后台线程来实现UDP通讯框架。UI线程用于处理用户界面的显示和操作,后台线程用于处理UDP数据的发送和接收。可以使用异步编程的方式,在后台线程上执行UDP通讯的相关操作,以避免阻塞UI线程,提高应用程序的响应性能。 在使用UDP通讯框架时,我们需要注意数据的分包和重组,以及数据的校验和错误处理。由于UDP是一种不可靠的通讯协议,数据的丢失或损坏是可能的,因此我们需要在应用层面进行数据的可靠性保证和错误处理。 综上所述,WPF窗体应用程序中的UDP通讯框架可以通过使用.NET框架中的相关类来实现,通过UI线程和后台线程配合实现数据的收发,并进行数据的分包和重组、校验和错误处理以保证通讯的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值