Как переподключить SignalR, если он закрыт с использованием response. Net core (зависимость SQL)? - PullRequest
0 голосов
/ 13 февраля 2020

Мы разработали уведомление об изменении базы данных с помощью SignalR реакции. Net ядро. Он работает нормально, но после того, как соединение закрыто, как перезапустить соединение снова с помощью activ. Net core?

1 Ответ

0 голосов
/ 13 февраля 2020

Вопрос не проясняет, используется ли старый SignalR или ASP. NET Core SignalR. ASP. NET Core SignalR был полностью переписан.

Текущий клиент Javascript, @ microsoft / signalr поддерживает автоматизированный c переподключение . Все, что вам нужно сделать, это добавить .withAutomaticReconnect() при создании соединения с концентратором:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .withAutomaticReconnect()
    .build();

Обновление

Статья , объясняющая, как работает @ microsoft / signalr очень очень тщательно. В разделе Reconnect клиентов объясняется:

  • , как включить автоматическое c переподключение с помощью простого .withAutomaticReconnect()
  • , как настроить количество повторов и задержек между ними, передав массив времени задержки withAutomaticReconnect, например: .withAutomaticReconnect([0, 0, 10000]). По умолчанию это [0, 2000, 10000, 30000] в общей сложности 42 секунды.
  • вместо массива задержек может использоваться обратный вызов:
.withAutomaticReconnect({
        nextRetryDelayInMilliseconds: retryContext => {
            if (retryContext.elapsedMilliseconds < 60000) {
                // If we've been reconnecting for less than 60 seconds so far,
                // wait between 0 and 10 seconds before the next reconnect attempt.
                return Math.random() * 10000;
            } else {
                // If we've been reconnecting for more than 60 seconds so far, stop reconnecting.
                return null;
            }
        }
    })
  • как обрабатывать события onreconnecting и onreconnected и, возможно, ведение журнала или отображение уведомления пользовательского интерфейса:
connection.onreconnecting((error) => {
    console.assert(connection.state === signalR.HubConnectionState.Reconnecting);

    document.getElementById("messageInput").disabled = true;

    const li = document.createElement("li");
    li.textContent = `Connection lost due to error "${error}". Reconnecting.`;
    document.getElementById("messagesList").appendChild(li);
});
  • Что делать в случае сбоя переподключения. В этом случае onclose срабатывает и может использоваться для повторного подключения:
connection.onclose(async () => {
    await start();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...