SignalR - вызов концентратора SendAsync с контроллера - PullRequest
0 голосов
/ 16 марта 2019

Контроллер

public class MyController : Controller
{
    private readonly IHubContext<MyHub> myHub;

    public MyController (IHubContext<MyHub> myHub)
    {
        this.myHub = myHub;
    }

    [HttpPost]
    public async Task<IActionResult> SomeAction()
    {
        await myHub.Clients.All.SendAsync("MethodToInvokeJS", "data");
        return this.RedirectToAction("View");
    }
}

Регистрация SignalR

    public void Configure(IApplicationBuilder app)
    {
        app.UseSignalR(routes =>
        {
            routes.MapHub<MyHub>("/myHub");
        });
    }

JS-код, выполняемый в отдельном представлении

var connection = new signalR.HubConnectionBuilder().withUrl("/myHub").build();

connection.on("MethodToInvokeJS", function (data) {
    // do something with data
});

Что я пытаюсь сделать

У меня есть 2 отдельных представления на отдельных контроллерах, и я хочу обработать пост-действие из MyController и перенаправить его в «Просмотр», сообщая другой странице на другом контроллере, чтоЯ сделал некоторые изменения через JS.

Что я узнал

MyController обрабатывает запрос и вызывает правильно инициализированный концентратор с правильным количеством подключенных соединенийна второй странице.Метод концентратора «SendAsync» был перенесен в режиме отладки, однако на второй странице я получаю «Информация: Соединение разорвано».как только это перешло в консоль браузера с открытой второй страницей.Он даже не достигает точки останова на «// сделать что-то с данными».

PS

Вызов этих методов-концентраторов с одной и той же страницы только в javascript и нес контроллером работает нормально.

...