Развертывание signalR с ARR в IIS (маршрутизация запросов приложений)

Мы используем SignalR в приложении. Был тип исключения:

Сервер-концентратор не может быть запущен. Сообщение: произошла одна или несколько ошибок. Трассировка стека: в System.Threading.Tasks.Task.ThrowIfExceptional (логическое includeTaskCanceledExceptions) в System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Taskry.Taskry (Источник объекта, ElapsedEventArgs e)

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

Код правильный, но есть проблема с конфигурацией SignalR с ARR.

    public void InitializeHub()
    {
        appLog.Write("Initializing Hub Server");
        IHubProxy _hub;
        var querystringData = new Dictionary<string, string>();
        querystringData.Add("Key", "key1");
        hypervisorConnection = new HubConnection("url", querystringData);
        _hub = hConnection.CreateHubProxy("Hub");
        _hub.On<HypervisorCommand>("ExecuteHypervisorCommand", x => ExecuteHypervisorCommand(x));

        #region Initialize Hub Timer
        hHubTimer = new System.Timers.Timer();
        hHubTimer.Elapsed += new ElapsedEventHandler(TryStartHub);
        hHubTimer.AutoReset = false;
        hHubTimer.Interval = 1000;
        hHubTimer.Enabled = true;
        hHubTimer.Start();
        #endregion
    }

    private void TryStartHub(object source, ElapsedEventArgs e)
    {
        try
        {
            if (hConnection.State != ConnectionState.Connected)
            {
                hConnection.Start().Wait();
                appLog.Write("Hypervisor Hub server started.");
            }
        }
        catch (Exception ex)
        {
            appLog.Write("Hub Server was unable to start. Message:" + ex.Message + "\n Stack trace:" + ex.StackTrace);
        }
        hHubTimer.Interval = 30000;
        hHubTimer.Start();
    }

person Ali Hassan    schedule 08.01.2019    source источник
comment
Можете ли вы предоставить нам полную трассировку стека? Возможно, вам нужно включить подробные сведения об ошибках на сервере, чтобы их получить.   -  person Stefan    schedule 08.01.2019
comment
Я уже прикрепил stacktrace, если вы посмотрите на вопрос. Более того, нет трассировки стека.   -  person Ali Hassan    schedule 08.01.2019
comment
Возможно, внутренние исключения?   -  person Stefan    schedule 08.01.2019
comment
Дай мне проверить. Спасибо   -  person Ali Hassan    schedule 08.01.2019
comment
Исключение просто показывает мне простыми словами, что концентратор не находит сервер, на котором размещен концентратор.   -  person Ali Hassan    schedule 08.01.2019


Ответы (1)


Итак, наконец, мы решили эту проблему. Проблема заключалась в настройке балансировщика нагрузки IIS ARR (маршрутизация запросов приложений).

1. Сначала выберите меню IIS формы ARR.  введите описание изображения здесь 2. Перейдите в прокси и установите порог буфера ответа на 0. Почему мы должны установить размер буфера ответа на 0? Вот подробное описание: По умолчанию установлено значение 256 КБ, что означает, что ответы будут буферизироваться до тех пор, пока они не достигнут этого количества. Если установить для этого параметра значение 0, ARR больше не будет буферизоваться, и SignlR будет работать правильно.

введите описание изображения здесь

3. Затем перейдите к балансировщику нагрузки и измените алгоритм балансировщика нагрузки с «циклического перебора» на «хэш переменной сервера». Теперь клиент SignalR будет каждый раз подключаться к хабу.

person Ali Hassan    schedule 09.01.2019