SignalR только время от времени отправляет сообщения на Azure - PullRequest
0 голосов
/ 07 октября 2018

У меня небольшое реагирующее веб-приложение, получающее данные из серверной части мобильного приложения Azure.Back-end - это простой REST API, использующий ApiController в C #.Клиенты должны быть проинформированы о конкретных изменениях в серверной части, выполненных другими клиентами.Поэтому я использую сигнализатор.Запуск всего на локальном хосте во время разработки работает нормально, и все сообщения отправляются правильно.Развертывание серверной части в Azure приводит к отправке только некоторых сообщений.Никакого конкретного типа сообщения только через 3-6 раз, когда оно должно быть отправлено, это будет.

Некоторые фрагменты - как я пытаюсь это сделать:

Чтобы все было действительно просто:

Концентратор выглядит так:

public class PostHub : Hub {}

Он зарегистрирован какследует (чтобы разрешить cors)

app.Map("/signalr", map =>
{
    map.UseCors(new CorsOptions
    {
        PolicyProvider = new CorsPolicyProvider
        {
            PolicyResolver = context =>
            {
                var policy = new CorsPolicy();
                policy.Origins.Add("*");
                policy.AllowAnyMethod = true;
                policy.AllowAnyHeader = true;
                policy.SupportsCredentials = true;
                return Task.FromResult(policy);
            }
        }
    });
    var hubConfig = new HubConfiguration { };
    map.RunSignalR(hubConfig);
});

Отправка сообщения из метода контроллеров выглядит (упрощенно):

pubic async Task<IHttpActionResult> ChangeSomething(string id)
{
    ... update some data in the back-end if allowed and so on...

    // result = changed data from the back-end having an Id property.

    IHubContext context = GlobalHost.ConnectionManager.GetHubContext<PostHub>();
    context.Clients.All.InformToUpdateDataFor(result.Id);

    return Ok(result);
}

Клиент (js) использует версию 2.3 сигнализатора пакета npm+0,0.И, как уже упоминалось, кажется, правильно получать сообщения (если они отправлены;)

В чем может быть проблема?Я читал здесь о некоторых других подобных проблемах, но они кажутся разными, потому что это не совсем определенно, когда сообщение отправляется, а когда нет.

1 Ответ

0 голосов
/ 11 октября 2018

Я сам виноват ...

Я играл с горизонтальным масштабированием веб-приложения.Поэтому я настроил иметь х экземпляров.Я забыл, что увеличил количество экземпляров и не настроил signalR для использования служебной шины.Это привело к проблеме, заключающейся в том, что конкретные экземпляры веб-приложения не знали о подключениях других экземпляров, и поэтому я получал только спорадические ответы ...

Если у кого-то еще есть эта проблема, просто установитеслужебную шину и скажите ей, чтобы она использовалась ...

...