как использовать push-уведомление SignalR на asp.net Данные MVC из API

#c# #asp.net-mvc #signalr #signalr-hub #asp.net-core-signalr

Вопрос:

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

хаб

 public class TransactionHub: Hub
{
    
}
 

Хранилище

 private readonly IHubContext<TransactionHub> _context;
private readonly IConfiguration _configuration;
private readonly string BASE_URL;

public TransactionRepository(IConfiguration configuration, IHubContext<TransactionHub> context) 
    {
        _configuration = configuration;
        BASE_URL = _configuration["BaseUrl"];
        _context = context;
    }

 public async Task<List<Transaction>> GetAllTransaction(string token)
    {
        var transaction = new List<Transaction>();
        var apiUrl = BASE_URL   "/Transaction";
        var response = await RequestGet(ClientBase(token), apiUrl);
        var result = response.Content.ReadAsStringAsync().Resu<
        if (response.IsSuccessStatusCode)
        {
            var jsonDeserializeSettings = new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.Objects
            };
            var apiResponse = JsonConvert.DeserializeObject<ApiResponse<List<Transaction>>>(result, jsonDeserializeSettings);
            transaction = apiResponse.data;
        }

        await _context.Clients.All.SendAsync("refreshTransactions");

        return transaction;
    }
 

Контроллер

 public async Task<IActionResult> GetAllTransaction()
    {
        List<Transaction> transactions = await _transactionRepository.GetAllTransaction("token");
        var jsonData = Json(new
        {
            data = transactions
        });
        return jsonData;
    }
 

язык JavaScript

 $(() => {
let connection = new signalR.HubConnectionBuilder().withUrl("/transactionhub").build()

connection.start()

connection.on("refreshTransactions", function () {
    loadData()
})

loadData();

function loadData() {
    let table = $('#transactionList').DataTable({
        "pagingType": "simple",
        "autoWidth": true,
        "ajax": {
            "url": "/GetAllTransaction",
            "type": "GET",
            "datatype": "json",
        },
        "columns": [
            { "data": "email", "autoWidth": true, "searchable": true },
            { "data": "stationName", "autoWidth": true, "searchable": true },
        ],
    });
})
 

запуск

 services.AddSignalR();
endpoints.MapHub<TransactionHub>("/transactionhub");
 

Комментарии:

1. SignalR 2.1 добавляет перегрузку к событию onDisconnect сервера, которое указывает, намеренно ли клиент отключился, а не истекло время ожидания. Параметр StopCalled имеет значение true, если клиент явно закрыл соединение. В JavaScript, если ошибка сервера привела к отключению клиента, информация об ошибке будет передана клиенту как $.connection.hub.lastError. Для получения более подробной информации, пожалуйста, обратитесь к документу: docs.microsoft.com/en-us/aspnet/signalr/overview/…