国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā)

這篇具有很好參考價值的文章主要介紹了ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

我之前稍微研究了一下SignalR Core。用起來還行。簡單來說SignalR就是用來解決實時通訊的問題的。

ASP.NET Core SingleR:初次體驗和簡單項目搭建

SignalR支持三種客戶端,C#,Java,JavaScirpt?;緣蛴昧?。本身就是微軟開發(fā)的,肯定支持自己的語言。因為是Websocket的上層封裝,所以也要支持Websocket的主要客戶,JavaScirpt。不過我沒想到有Java版本的,那這樣雙語言互通的問題也就解決了。

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

環(huán)境

  • .net core 8.0
  • visual studio 2022

Webapi開發(fā)測試

服務端開發(fā)

我們新建一個WebApi

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

按照我之前設置的

.NET Core webapi 從零開始在IIS上面發(fā)布后端接口

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

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 第二參數(shù) 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 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

客戶端開發(fā)

官方文檔

ASP.NET Core SignalR .NET 客戶端

為了方便操作的實時性,我們新建一個WPF程序

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

微軟官方示例代碼

新建項目

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

Nuget添加
ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

添加代碼

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),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 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

代碼解析

SignalR的代碼將服務器的輸入和輸出分為兩類:

  • 輸入:類似于Http的接口
  • 輸出:類似于Http的回調,因為SignalR的數(shù)據是通關另一個口進行返回的

服務端

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

客戶端

ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端
ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā),ASP.NET Core,asp.net,.net,后端

所以我們一般的代碼邏輯

  • 監(jiān)聽所有的回調
  • 嘗試連接
  • 連接成功,發(fā)送接口
  • 服務器返回回調,回調到監(jiān)聽的接口

總結

我們目前是單接口,單回調。收發(fā)數(shù)據,那還是比較簡單。那么如果我們想對SignalR的接口進行復雜的調用呢?下篇文章我會對這個進行思考和探索。文章來源地址http://www.zghlxwxcb.cn/news/detail-807884.html

到了這里,關于ASP.NET Core SingleR Core:WebApi + .net 客戶端開發(fā)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ASP.NET 獲取客戶端IP、MAC地址

    ? qqwry.dat 純真IP數(shù)據庫下載地址:? ?

    2024年02月15日
    瀏覽(24)
  • ASP.NET Core SingleR:初次體驗和簡單項目搭建

    ASP.NET Core SingleR:初次體驗和簡單項目搭建

    平常的網頁通訊都是基于Http 請求的,特點就是每次請求之后都會關閉,延遲會比較大。如果想做網頁游戲,網頁聊天等功能,就要用到即時通信。SignalR 就是一種即時通訊的方式。 微軟官方|ASP.NET Core SignalR 概述 我們一般的網絡請求都是數(shù)據先進數(shù)據庫,再用網頁請求把數(shù)據

    2024年01月17日
    瀏覽(87)
  • .net 溫故知新【14】:Asp.Net Core WebAPI  緩存

    .net 溫故知新【14】:Asp.Net Core WebAPI 緩存

    緩存指在中間層中存儲數(shù)據的行為,該行為可使后續(xù)數(shù)據檢索更快。 從概念上講,緩存是一種性能優(yōu)化策略和設計考慮因素。 緩存可以顯著提高應用性能,方法是提高不常更改(或檢索成本高)的數(shù)據的就緒性。 在最新的緩存控制規(guī)范文件RFC9111中,詳細描述了瀏覽器緩存和

    2024年02月05日
    瀏覽(89)
  • Asp.net core Webapi 如何執(zhí)行定時任務?

    Asp.net core Webapi 如何執(zhí)行定時任務?

    在計算機系統(tǒng)中,定時執(zhí)行一些后臺任務是很常見的場景,比如定時發(fā)送郵件、備份數(shù)據等等。 那么,.NET 技術如何通過編程靈活地實現(xiàn)項目里復雜的自定義任務呢? 如果是 Windows 生態(tài),通常來說,可以有這些方式: 編寫一個程序,通過 Windows 內置的任務計劃來定時執(zhí)行。

    2024年02月04日
    瀏覽(87)
  • .net 溫故知新【17】:Asp.Net Core WebAPI  中間件

    .net 溫故知新【17】:Asp.Net Core WebAPI 中間件

    到這篇文章為止,關于.NET \\\"溫故知新\\\"系列的基礎知識就完結了,從這一系列的系統(tǒng)回顧和再學習,對于.NET core、ASP.NET CORE又有了一個新的認識。 不光是從使用,還包括這些知識點的原理,雖然深入原理談不上,但對于日常使用也夠了,我想的是知其然,知其所以然。 在實際

    2024年01月18日
    瀏覽(92)
  • Asp.NET Core WebAPI 入門學習筆記,超詳細

    Asp.NET Core WebAPI 入門學習筆記,超詳細

    WebAPI 是一種傳統(tǒng)的方式,用于構建和暴露 RESTUI風格的Web服務。它提供了豐富的功能和靈活性,可以處理各種HTTP請求,并支持各種數(shù)據格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和動作方法(ActionMethods)的概念、通過路由配置將請求映射到相應的方法上。 開發(fā)人員可以使用

    2024年04月24日
    瀏覽(94)
  • ASP.NET core WebApi Cors跨域解決

    ASP.NET core WebApi Cors跨域解決

    我用了最新版的Asp.net webapi ,在csdn上面搜跨域如何解決的時候,發(fā)現(xiàn)csdn上面對于.NET技術討論不是很多。沒辦法,只能面向官方文檔和GitHub編程了。 前面兩個已經放棄維護了,我們就不用了。用最新的webApi 我們引入了最新的api后可以在官方網址上查看文檔(有些地址是gitH

    2024年04月29日
    瀏覽(93)
  • .net 溫故知新【11】:Asp.Net Core WebAPI 入門使用及介紹

    .net 溫故知新【11】:Asp.Net Core WebAPI 入門使用及介紹

    在Asp.Net Core 上面由于現(xiàn)在前后端分離已經是趨勢,所以asp.net core MVC用的沒有那么多,主要以WebApi作為學習目標。 我使用的是VS2022, .Net 7版本。 在創(chuàng)建界面有幾項配置: 配置Https 啟用Docker 使用控制器 啟用OpenAPI支持 不使用頂級語句 其中配置Https 是WebApi是否使用https協(xié)議,啟

    2024年02月07日
    瀏覽(86)
  • asp.net core webapi如何執(zhí)行周期性任務

    asp.net core webapi如何執(zhí)行周期性任務

    新建asp.net core webapi項目,使用Nuget搜索安裝Quartz包。 注意:定時執(zhí)行時間格式,參考連接:https://www.cnblogs.com/wudequn/p/8506938.html 在IIS中找到這個站點所用的程序池,點擊“高級設置…” 在打開的列表中更改以下設置: 回收——固定時間間隔(分鐘) 改為 0 ——虛擬/專用內存

    2024年02月13日
    瀏覽(101)
  • ASP.NET CORE WEBAPI 登錄 JWT 鑒權 ,接口權限驗證

    介紹 當今Web開發(fā)中,API的使用越來越廣泛,而API的安全性也變得越來越重要。其中,JWT(JSON Web Token)鑒權和授權是一種常見的解決方案。 本篇文章將會介紹JWT鑒權和授權的原理、實現(xiàn)方式以及注意事項。 什么是JWT? JWT是一種基于JSON格式的開放標準(RFC7519),用于在網絡

    2023年04月21日
    瀏覽(84)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包