ASP.NET Core SingleR Core:WebApi + .net 客户端开发

这篇具有很好参考价值的文章主要介绍了ASP.NET Core SingleR Core:WebApi + .net 客户端开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

我之前稍微研究了一下SignalR Core。用起来还行。简单来说SignalR就是用来解决实时通讯的问题的。

ASP.NET Core SingleR:初次体验和简单项目搭建

SignalR支持三种客户端,C#,Java,JavaScirpt。基本够用了。本身就是微软开发的,肯定支持自己的语言。因为是Websocket的上层封装,所以也要支持Websocket的主要客户,JavaScirpt。不过我没想到有Java版本的,那这样双语言互通的问题也就解决了。

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

环境

  • .net core 8.0
  • visual studio 2022

Webapi开发测试

服务端开发

我们新建一个WebApi

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

按照我之前设置的

.NET Core webapi 从零开始在IIS上面发布后端接口

再添加一下上次添加的聊天室代码

ASP.NET Core SingleR:初次体验和简单项目搭建

Program.cs

var builder = WebApplication.CreateBuilder(args);
//配置跨域
var MyPolicy = "MyPolicy";
builder.Services.AddCors(options =>
{
    options.AddPolicy(MyPolicy, policy =>
    {
        policy.AllowAnyHeader().AllowAnyOrigin().AllowAnyMethod();
    });
});
//启用SignalR
builder.Services.AddSignalR();

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
//添加swagger接口配置
builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "API标题",
        Description = $"API描述,v1版本"
    });
    var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    //IncludeXmlComments 第二参数 true 则显示 控制器 注释
    options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true);
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
   
}

app.UseSwagger();
app.UseSwaggerUI();
//自动重定向到swgger文件
app.UseStatusCodePagesWithRedirects("/swagger/index.html");
app.UseCors(MyPolicy);
app.UseHttpsRedirection();

app.UseAuthorization();
//SignalR位置
app.MapHub<ChatHub>("/ChatHub");

app.MapControllers();

app.Run();

ChatHub

using Microsoft.AspNetCore.SignalR;

namespace SiganlRTest.Hubs
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}



ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

客户端开发

官方文档

ASP.NET Core SignalR .NET 客户端

为了方便操作的实时性,我们新建一个WPF程序

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

微软官方示例代码

新建项目

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

Nuget添加
ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

添加代码

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

MainWindow.xaml
<Window x:Class="SignalR_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SignalR_WPF"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="450"
        Width="800">
    <Grid Margin="0,0,193.333,50.667">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="109*" />
            <ColumnDefinition Width="288*" />
        </Grid.ColumnDefinitions>
        <Button x:Name="connectButton"
                Content="Connect"
                HorizontalAlignment="Left"
                Margin="275.333,63,0,0"
                VerticalAlignment="Top"
                Width="95"
                Click="connectButton_Click"
                Height="41"
                Grid.Column="1" />
        <Button x:Name="sendButton"
                Content="Send Message"
                HorizontalAlignment="Left"
                Margin="275.333,113,0,0"
                VerticalAlignment="Top"
                Width="95"
                Click="sendButton_Click"
                Height="41"
                Grid.Column="1"
                IsEnabled="False" />
        <TextBox x:Name="messageTextBox"
                 HorizontalAlignment="Left"
                 Height="41"
                 Margin="82,113,0,0"
                 TextWrapping="Wrap"
                 VerticalAlignment="Top"
                 Width="311"
                 Grid.ColumnSpan="2" />
        <ListBox x:Name="messagesList"
                 HorizontalAlignment="Left"
                 Height="141"
                 Margin="82,170,0,0"
                 VerticalAlignment="Top"
                 Width="311"
                 RenderTransformOrigin="-0.304,0.109"
                 BorderThickness="1"
                 Grid.ColumnSpan="2"
                 BorderBrush="Gainsboro" />
        <TextBox x:Name="userTextBox"
                 HorizontalAlignment="Left"
                 Height="41"
                 Margin="82,57,0,0"
                 TextWrapping="Wrap"
                 VerticalAlignment="Top"
                 Width="311"
                 Grid.ColumnSpan="2" />
        <Label Content="User"
               HorizontalAlignment="Left"
               Height="31"
               Margin="39,63,0,0"
               VerticalAlignment="Top"
               Width="38" />
        <Label Content="Message"
               HorizontalAlignment="Left"
               Height="26"
               Margin="19,120,0,0"
               VerticalAlignment="Top"
               Width="58" />

    </Grid>
</Window>

MainWindow.xaml.cs
using Microsoft.AspNetCore.SignalR.Client;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SignalR_WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        HubConnection connection;
        public MainWindow()
        {
            InitializeComponent();

            connection = new HubConnectionBuilder()
                .WithUrl("http://localhost:53353/ChatHub")
                .Build();

            #region snippet_ClosedRestart
            connection.Closed += async (error) =>
            {
                await Task.Delay(new Random().Next(0, 5) * 1000);
                await connection.StartAsync();
            };
            #endregion
        }

        private async void connectButton_Click(object sender, RoutedEventArgs e)
        {
            #region snippet_ConnectionOn
            connection.On<string, string>("ReceiveMessage", (user, message) =>
            {
                this.Dispatcher.Invoke(() =>
                {
                    var newMessage = $"{user}: {message}";
                    messagesList.Items.Add(newMessage);
                });
            });
            #endregion

            try
            {
                await connection.StartAsync();
                messagesList.Items.Add("Connection started");
                connectButton.IsEnabled = false;
                sendButton.IsEnabled = true;
            }
            catch (Exception ex)
            {
                messagesList.Items.Add(ex.Message);
            }
        }

        private async void sendButton_Click(object sender, RoutedEventArgs e)
        {
            #region snippet_ErrorHandling
            try
            {
                #region snippet_InvokeAsync
                await connection.InvokeAsync("SendMessage",
                    userTextBox.Text, messageTextBox.Text);
                #endregion
            }
            catch (Exception ex)
            {
                messagesList.Items.Add(ex.Message);
            }
            #endregion
        }
    }
}

运行结果

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

代码解析

SignalR的代码将服务器的输入和输出分为两类:

  • 输入:类似于Http的接口
  • 输出:类似于Http的回调,因为SignalR的数据是通关另一个口进行返回的

服务端

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

客户端

ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客户端开发,ASP.NET Core,asp.net,.net,后端

所以我们一般的代码逻辑

  • 监听所有的回调
  • 尝试连接
  • 连接成功,发送接口
  • 服务器返回回调,回调到监听的接口

总结

我们目前是单接口,单回调。收发数据,那还是比较简单。那么如果我们想对SignalR的接口进行复杂的调用呢?下篇文章我会对这个进行思考和探索。文章来源地址https://www.toymoban.com/news/detail-807884.html

到了这里,关于ASP.NET Core SingleR Core:WebApi + .net 客户端开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET 获取客户端IP、MAC地址

      qqwry.dat 纯真IP数据库下载地址:   

    2024年02月15日
    浏览(31)
  • ASP.NET Core SingleR:初次体验和简单项目搭建

    平常的网页通讯都是基于Http 请求的,特点就是每次请求之后都会关闭,延迟会比较大。如果想做网页游戏,网页聊天等功能,就要用到即时通信。SignalR 就是一种即时通讯的方式。 微软官方|ASP.NET Core SignalR 概述 我们一般的网络请求都是数据先进数据库,再用网页请求把数据

    2024年01月17日
    浏览(43)
  • .net 温故知新【14】:Asp.Net Core WebAPI 缓存

    缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性。 在最新的缓存控制规范文件RFC9111中,详细描述了浏览器缓存和

    2024年02月05日
    浏览(37)
  • Asp.net core Webapi 如何执行定时任务?

    在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件、备份数据等等。 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说,可以有这些方式: 编写一个程序,通过 Windows 内置的任务计划来定时执行。

    2024年02月04日
    浏览(28)
  • .net 温故知新【17】:Asp.Net Core WebAPI 中间件

    到这篇文章为止,关于.NET \\\"温故知新\\\"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NET core、ASP.NET CORE又有了一个新的认识。 不光是从使用,还包括这些知识点的原理,虽然深入原理谈不上,但对于日常使用也够了,我想的是知其然,知其所以然。 在实际

    2024年01月18日
    浏览(34)
  • Asp.NET Core WebAPI 入门学习笔记,超详细

    WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用

    2024年04月24日
    浏览(40)
  • ASP.NET core WebApi Cors跨域解决

    我用了最新版的Asp.net webapi ,在csdn上面搜跨域如何解决的时候,发现csdn上面对于.NET技术讨论不是很多。没办法,只能面向官方文档和GitHub编程了。 前面两个已经放弃维护了,我们就不用了。用最新的webApi 我们引入了最新的api后可以在官方网址上查看文档(有些地址是gitH

    2024年04月29日
    浏览(35)
  • .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍

    在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。 我使用的是VS2022, .Net 7版本。 在创建界面有几项配置: 配置Https 启用Docker 使用控制器 启用OpenAPI支持 不使用顶级语句 其中配置Https 是WebApi是否使用https协议,启

    2024年02月07日
    浏览(27)
  • asp.net core webapi如何执行周期性任务

    新建asp.net core webapi项目,使用Nuget搜索安装Quartz包。 注意:定时执行时间格式,参考连接:https://www.cnblogs.com/wudequn/p/8506938.html 在IIS中找到这个站点所用的程序池,点击“高级设置…” 在打开的列表中更改以下设置: 回收——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存

    2024年02月13日
    浏览(29)
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络

    2023年04月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包