Правильно ли настроен прослушиватель событий SignalR после перезагрузки страницы?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Правильно ли настроен прослушиватель событий SignalR после перезагрузки страницы?

Сообщение Anonymous »

У меня есть компонент страницы, куда я добавляю SignalR HubConnection:

Код: Выделить всё

@page "/test"
@using System.Diagnostics
@using Microsoft.AspNetCore.SignalR.Client
@rendermode InteractiveServer

@implements IAsyncDisposable

Test

Send Message

@foreach(var m in _messages)
{
@m
}

@code {
private readonly List _messages = [];
private HubConnection? _hubConnection;

protected override async Task OnInitializedAsync()
{
_hubConnection = new HubConnectionBuilder()
.WithUrl("http://localhost:5200/message")
.WithAutomaticReconnect()
.Build();

_hubConnection.On("OnMessage", GetMessage);

await _hubConnection.StartAsync();

await base.OnInitializedAsync();
}

private void GetMessage(string message)
{
_messages.Add(message);
Debug.WriteLine(message);
InvokeAsync(StateHasChanged);
}

public async ValueTask DisposeAsync()
{
if (_hubConnection is not null)
{
_hubConnection.Remove("OnMessage");
await _hubConnection.StopAsync();
await _hubConnection.DisposeAsync();
}
}

private async Task SendMessage()
{
await _hubConnection.SendAsync("SendMessage", "Hello");
}

}
С помощью этого кода вы можете отправить сообщение, нажав кнопку, и каждый подключенный клиент получит это сообщение.
На сервере я просто пересылаю сообщение сообщения всем клиентам

Код: Выделить всё

public async Task SendMessage(string message)
{
await Clients.All.SendAsync("OnMessage", message);
}
В моей функции GetMessage я записываю сообщение в окно вывода Debug.WriteLine(message);.
Когда я открываю страницу и нажимаю кнопку «Отправить», сообщение отображается один раз на моей странице и один раз в окне вывода.
Но если я обновлю страницу и нажму еще раз, сообщение отобразится один раз на моей странице. но дважды в моем окне вывода, как будто первый прослушиватель событий все еще зарегистрирован, хотя он должен был быть удален, не так ли?
Если вы отслеживаете текущую цепь и поместив это в выходные данные, вы увидите, что функция GetMessage вызывается из обеих цепей (до и после обновления) (я не включил это в код, чтобы упростить его).
Обработчик событий размещается неправильно? как это вообще может работать, когда соединение с хабом закрыто и удалено? что я здесь неправильно понимаю?

Подробнее здесь: https://stackoverflow.com/questions/787 ... ad-of-page
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»