代码之家  ›  专栏  ›  技术社区  ›  Sibeesh Venu

错误:服务器在关闭时返回错误:当前没有应用服务器连接到Azure服务“@aspnet/signal”

  •  0
  • Sibeesh Venu  · 技术社区  · 5 年前

    我有一个MXChip,它将数据发送到Azure IoT集线器,从那里我使用Azure Signal R绑定的Azure函数将设备数据发布到Azure Signal R。我有一个Angular客户端,它将通过调用我使用包创建的Azure协商函数来获取连接信息 @aspnet/signalr .

    但问题是我的客户端每隔几秒钟就会抛出一个错误,当我检查时,我可以理解 hubConnection.onclose 事件每隔几秒钟就会触发一次。

    下面是我的角度服务代码。

    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 回复  |  直到 5 年前
        1
  •  2
  •   Sibeesh Venu    5 年前

    我想出了一个简单的解决办法。这个 SignalR.HubConnection 具有以下特性 serverTimeoutInMilliseconds keepAliveIntervalInMilliseconds

    服务器超时毫秒数

    如果此超时时间过去而未从服务器接收任何消息,则连接将因错误而终止。默认超时值为30000毫秒(30秒)。

    保持间隔毫秒

    ping服务器的默认间隔。

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

    我们还可以在以后的时间内再次启动中心 onclose 事件作为临时修复。

    this.hubConnection.onclose((error) => {
        this.hubConnection.start();
        console.error(`Something went wrong: ${error}`);
    });
    
        2
  •  0
  •   cigien    4 年前

    尝试将信号器服务模式切换到无服务器(或经典)

    Azure Portal SignalR Service Mode Setting