ASP.NET Core: Sử dụng ASP.NET Core SignalR với Blazor


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Bài hướng dẫn này cung cấp trải nghiệm làm việc cơ bản để xây dựng ứng dụng thời gian thực bằng SignalR với Blazor. Bài viết này hữu ích cho các nhà phát triển đã quen thuộc với SignalR và đang tìm hiểu cách sử dụng SignalR trong ứng dụng Blazor. Để biết hướng dẫn chi tiết về khung SignalR và Blazor, hãy xem bộ tài liệu tham khảo sau đây và tài liệu API:

Mục tiêu bài hướng dẫn:

  • Tạo ứng dụng Blazor
  • Thêm thư viện máy khách SignalR
  • Thêm một hub SignalR
  • Thêm dịch vụ SignalR và điểm cuối cho hub SignalR
  • Thêm mã thành phần Razor để trò chuyện

Khi kết thúc hướng dẫn này, bạn sẽ có một ứng dụng trò chuyện đang hoạt động.

Điều kiện tiên quyết

Visual Studio 2022 trở lên với ASP.NET và khối lượng công việc phát triển web.

Ứng dụng mẫu

Không cần tải xuống ứng dụng trò chuyện mẫu của hướng dẫn cho hướng dẫn này. Ứng dụng mẫu là ứng dụng cuối cùng, hoạt động được tạo ra bằng cách làm theo các bước của hướng dẫn này.

Xem hoặc tải xuống mã mẫu

Tạo ứng dụng Blazor Server

Thực hiện theo các hướng dẫn cho sự lựa chọn của bạn về công cụ:

Lưu ý

Bắt buộc phải có Visual Studio 2022 trở lên và .NET Core SDK 6.0.0 trở lên.

Tạo một dự án mới.

Chọn mẫu Blazor Server App. Chọn Next.

Nhập BlazorServerSignalRApp vào trường Project name. Xác nhận entry Location là chính xác hoặc cung cấp vị trí cho dự án. Chọn Next.

Chọn Create.

Thêm thư viện máy khách SignalR

Trong Solution Explorer, bấm chuột phải vào dự án BlazorServerSignalRApp và chọn Manage NuGet Packages.

Trong hộp thoại Manage NuGet Packages, hãy xác nhận rằng Package source được đặt thành nuget.org.

Với Browse được chọn, hãy nhập Microsoft.AspNetCore.SignalR.Client vào hộp tìm kiếm.

Trong kết quả tìm kiếm, chọn gói Microsoft.AspNetCore.SignalR.Client. Đặt phiên bản phù hợp với framework dùng chung của ứng dụng. Chọn Install.

Nếu hộp thoại Preview Changes xuất hiện, hãy chọn OK.

Nếu hộp thoại License Acceptance xuất hiện, hãy chọn I Accept nếu bạn đồng ý với các điều khoản của giấy phép.

Thêm một hub SignalR

Tạo một thư mục có tên Hubs và thêm lớp ChatHub như sau (Hubs/ChatHub.cs):

using Microsoft.AspNetCore.SignalR;

namespace BlazorServerSignalRApp.Server.Hubs;

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

Thêm dịch vụ và điểm cuối cho hub SignalR

Mở file Program.cs ra.

Thêm các namespace cho Microsoft.AspNetCore.ResponseCompression và ChatHub lớp vào đầu tệp:

using Microsoft.AspNetCore.ResponseCompression;
using BlazorServerSignalRApp.Server.Hubs;

Thêm các dịch vụ Response Compression Middleware:

builder.Services.AddResponseCompression(opts =>
{
   opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
         new[] { "application/octet-stream" });
});

Sử dụng Response Compression Middleware ở đầu cấu hình của quy trình xử lý:

app.UseResponseCompression();

Giữa các điểm cuối để ánh xạ hub Blazor và dự phòng phía máy khách, hãy thêm một điểm cuối cho hub ngay sau dòng app.MapBlazorHub();:

app.MapHub<ChatHub>("/chathub");

Thêm code thành phần Razor cho phần chat

Mở file Pages/Index.razor ra.

Thay thế đánh dấu bằng đoạn mã sau:

@page "/"
@using Microsoft.AspNetCore.SignalR.Client
@inject NavigationManager Navigation
@implements IAsyncDisposable

<PageTitle>Index</PageTitle>

<div class="form-group">
    <label>
        User:
        <input @bind="userInput" />
    </label>
</div>
<div class="form-group">
    <label>
        Message:
        <input @bind="messageInput" size="50" />
    </label>
</div>
<button @onclick="Send" disabled="@(!IsConnected)">Send</button>

<hr>

<ul id="messagesList">
    @foreach (var message in messages)
    {
        <li>@message</li>
    }
</ul>

@code {
    private HubConnection? hubConnection;
    private List<string> messages = new List<string>();
    private string? userInput;
    private string? messageInput;

    protected override async Task OnInitializedAsync()
    {
        hubConnection = new HubConnectionBuilder()
            .WithUrl(Navigation.ToAbsoluteUri("/chathub"))
            .Build();

        hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
        {
            var encodedMsg = $"{user}: {message}";
            messages.Add(encodedMsg);
            InvokeAsync(StateHasChanged);
        });

        await hubConnection.StartAsync();
    }

    private async Task Send()
    {
        if (hubConnection is not null)
            {
                await hubConnection.SendAsync("SendMessage", userInput, messageInput);
            }
    }

    public bool IsConnected =>
        hubConnection?.State == HubConnectionState.Connected;

    public async ValueTask DisposeAsync()
    {
        if (hubConnection is not null)
        {
            await hubConnection.DisposeAsync();
        }
    }
}

Lưu ý

Vô hiệu hóa Response Compression Middleware trong môi trường Development khi sử dụng Hot Reloaded. Để biết thêm thông tin, hãy xem hướng dẫn ASP.NET Core Blazor SignalR.

Chạy ứng dụng

Thực hiện theo các hướng dẫn cho công cụ của bạn:

Nhấn F5 để chạy ứng dụng có gỡ lỗi hoặc Ctrl+ F5 (Windows)/ + F5 (macOS) để chạy ứng dụng mà không cần gỡ lỗi.

Sao chép URL từ thanh địa chỉ, mở một phiên bản hoặc tab trình duyệt khác và dán URL vào thanh địa chỉ.

Chọn một trong hai trình duyệt, nhập tên và tin nhắn, rồi chọn nút để gửi tin nhắn. Tên và tin nhắn được hiển thị trên cả hai trang ngay lập tức:

Ứng dụng mẫu SignalR Blazor mở trong hai cửa sổ trình duyệt hiển thị các tin nhắn đã trao đổi.

Trích dẫn:  Star Trek VI: Đất nước chưa được khám phá  ©1991  Paramount

Bước tiếp theo

Trong hướng dẫn này, bạn đã học được:

  • Tạo ứng dụng Blazor
  • Thêm thư viện máy khách SignalR
  • Thêm một hub SignalR
  • Thêm dịch vụ SignalR và điểm cuối cho hub SignalR
  • Thêm mã thành phần Razor để trò chuyện

Để biết hướng dẫn chi tiết về các framework SignalR và Blazor, hãy xem các bộ tài liệu tham khảo sau:

Tổng quan về ASP.NET Core SignalR ASP.NET Core Blazor

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Triển khai ứng dụng web ASP.NET
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!