#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/…