Ошибка: сервер вернул ошибку при закрытии: сервер приложений в настоящее время не подключен к службе Azure '@ aspnet / signalr - PullRequest
0 голосов
/ 02 января 2019

У меня есть MXChip, который отправляет данные в концентратор IoT Azure. Оттуда я использую функцию Azure с привязкой Azure SignalR для отправки данных устройства в Azure Signal R. И у меня есть клиент Angular, который получает информацию о соединениивызвав созданную мной функцию согласования Azure, используя пакет @aspnet/signalr.

Но проблема в том, что мой клиент Angular выдает ошибку каждые несколько секунд, и когда я проверяю, я могу понять, что hubConnection.onclose событие начинается каждые несколько секунд.

Ниже приведен мой код обслуживания Angular.

export class SignalRService {
    mxChipData: Subject < string > = new Subject();
    private hubConnection: SignalR.HubConnection;

    constructor(private http: HttpClient) {}

    private getSignalRConnection(): Observable < SignalRConnection > {
        return this.http.get < SignalRConnection > (`${environment.baseUrl}negotiate`);
    }

    init() {
        this.getSignalRConnection().subscribe(con => {
            const options = {
                accessTokenFactory: () => con.accessToken
            };

            this.hubConnection = new SignalR.HubConnectionBuilder()
                .withUrl(con.url, options)
                .configureLogging(SignalR.LogLevel.Information)
                .build();

            this.hubConnection.on('notify', data => {
                this.mxChipData.next(data);
            });

            this.hubConnection.start()
                .catch(error => console.error(error));

            this.hubConnection.onclose((error) => {
                console.error(`Something went wrong: ${error}`);
            });
        });
    }
}

Можно ли как-нибудь избавиться от этого поведения?

1 Ответ

0 голосов
/ 02 января 2019

Я понял, легко исправить. SignalR.HubConnection имеет свойства serverTimeoutInMilliseconds и keepAliveIntervalInMilliseconds.

serverTimeoutInMilliseconds

Тайм-аут сервера в миллисекундах.

Если этот тайм-аут истекает без получения каких-либо сообщений от сервера, соединение будет прервано с ошибкой. Значение времени ожидания по умолчанию составляет 30 000 миллисекунд (30 секунд).

keepAliveIntervalInMilliseconds

Интервал по умолчанию для проверки связи с сервером.

Значение по умолчанию составляет 15 000 миллисекунд (15 секунд). Позволяет серверу обнаруживать жесткие отключения (например, когда клиент отключает компьютер от сети).

Я просто установил эти значения на большее число.

this.hubConnection.serverTimeoutInMilliseconds = 300000;
this.hubConnection.keepAliveIntervalInMilliseconds = 300000;

Мы также можем снова запустить концентратор в событии onclose в качестве временного исправления.

this.hubConnection.onclose((error) => {
    this.hubConnection.start();
    console.error(`Something went wrong: ${error}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...