использование SignalR для отправки обновлений в реальном времени клиентским приложениям - PullRequest
0 голосов
/ 12 июля 2020

Я использую библиотеку 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.

Может ли кто-нибудь сообщить мне, если я делаю что-то концептуально здесь неправильно?

...