Я использую библиотеку signalR для приложения реального времени, где я хотел бы показать в реальном времени статус задания, которое выполняется в пользовательском интерфейсе. Например, если тест запущен, статус теста может быть «не запущен», «запущен», «прошел» или «не прошел». И я хотел бы показать этот статус в реальном времени в пользовательском интерфейсе. Я создал простое приложение, в котором я получаю статус теста с помощью HTTP-запроса Get.
код
namespace SignalR_server.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class MessageController : ControllerBase
{
private IHubContext<MessageHub> _myHub;
public MessageController(IHubContext<MessageHub> hub)
{
_myHub = hub;
}
[HttpGet]
public string Get()
{
RunStatus runStatus = new RunStatus();
var random = new Random();
var testRunResults = new List<string> { "Pass","Fail"}
try
{
runStatus.id = "41950";
runStatus.name = "DemoRun";
runStatus.status = "Running";
_myHub.Clients.All.SendAsync("transfermessage", runStatus);
Thread.Sleep(5000);
int testRunResultIndex = random.Next(testRunResults.Count);
runStatus.status = testRunResults[testRunResultIndex];
_myHub.Clients.All.SendAsync("transfermessage", runStatus);
return "success !!";
}
catch (Exception ex)
{
return ex.Message.ToString();
}
}
}
Первоначально статус тестового запуска должен отображаться как запущенный и всякий раз, когда тест статус выполнения меняется с «работает» на «прошел» или «не прошел», которые должны отображаться в пользовательском интерфейсе в реальном времени, но я думаю, что то, как я это реализовал, выглядит неправильно. Я чувствую, что вызов метода _myHub.Clients.All.SendAsync("transfermessage", runStatus)
дважды - неправильный способ использования signalR.
Может ли кто-нибудь сообщить мне, если я делаю что-то концептуально здесь неправильно?