Сумасшедшее поведение в SignalR в Azure Web App, работает только для вкладок в одном экземпляре браузера - PullRequest
0 голосов
/ 17 ноября 2018

Около 3 дней мы ищем решение ... локально, в IIS Express все работает нормально ... после развертывания в Azure Web App мы начинаем сталкиваться с сумасшествием SignalR ...

У нас есть WebJob, который подключается к концентратору для отправки обновлений в режиме реального времени ... Чтобы проверить проблемы с подключением, я получаю возвращаемое значение от функции, вызываемой на сервере, все это происходит ... Итак, подключения выполняются успешно ...

На моем хабе, после получения значения из WebJob, я вызываю функцию Javascript в моем веб-приложении ... каждый зарегистрированный пользователь должен получать обновления.

Но эта функция никогда не срабатывает в Azure ... Локально все работает отлично.

После этого мы попробовали почти все ...

Если запрос поступил из того же экземпляра браузера, функция была вызвана успешно.

Проверьте это здесь:

Открыть ссылку:

http://unique -dev.azurewebsites.net /

Затем откройте эту другую ссылку, чтобы отправить уведомление:

http://unique -dev.azurewebsites.net / AdministratorDashboard / SendNotifications? Текст = MyMessage

SignalRClient.js

var uniqueHub;
$(function () {

    uniqueHub = $.connection.billingHubNotification;
    uniqueHub.client.uniqueEngineAlert = function (content) {
        alert(content);
    };

    $.connection.hub.start()
        .done(function () { })
        .fail(function () { console.log('Could not Connect!'); });;

    $.connection.hub.error(function (error) {
        console.log('SignalrAdapter: ' + error);
    });
});

Действие в контроллере

[HttpGet]
[AllowAnonymous]
public ActionResult SendNotifications(string text)
{
    try
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<BillingHubNotification>();
        var exec = hubContext.Clients.All.uniqueEngineAlert(text);

        return Content("Sucesso");
    }
    catch (Exception ex)
    {
        return Content("Erro: " + ex.Message);

    }
}

Hub

    [HubName("billingHubNotification")]
    public class BillingHubNotification : Hub
    {
        IHubContext _context
        {
            get
            {
                var context = GlobalHost.ConnectionManager.GetHubContext<BillingHubNotification>();
                return context;
            }
        }
        public override Task OnConnected()
        {
            string name = Context.User.Identity.Name;

            _context.Groups.Add(Context.ConnectionId, name);

            return base.OnConnected();
        }


        public void UniqueEngineAlert(string alert, string[] userNames)
        {
            foreach (var user in userNames)
            {
                _context.Clients.Group(user).uniqueEngineAlert(alert);
            }
        }
    }

Не могли бы вы, пожалуйста, сохранить нас?

...