Can't unsubscribe from SignalR events
Asked Answered
D

0

7

I have multiple Angular components that are subscribing to a SignalR hub connection. I have wrapped the SignalR hub connection object to an angular service, hubconnection.service.ts:

import { Injectable } from '@angular/core';
import { HubConnectionBuilder, HubConnection } from '@aspnet/signalr';

@Injectable()
export class HubConnectionService {
    public MyHubConnection: HubConnection;

    constructor() {
        this.MyHubConnection = new HubConnectionBuilder()
            .withUrl('/sensorHub')
            .build();

        this.MyHubConnection
            .start()
            .then(() => console.log('[HubConnectionService] Connection started'))
            .catch(err => console.log('[HubConnectionService] Error while starting connection: ' + err));
    }
}

Now I have a component from where I want to subscribe to the data received through the SignalR hub, to do this I import my SignalR wrapper, and in the constructor I call the .on() method. To unsubscribe from that event I call the .off() method in the destructor:

export class RawdataComponent implements OnInit {
    constructor(private hubConnectionService: HubConnectionService) { }

    ngOnDestroy() {
        this.hubConnectionService.MyHubConnection.off('Broadcast');
    }

    ngOnInit() {
        this.hubConnectionService.MyHubConnection.on('Broadcast',
                function(sender, message) {
                  console.log('New message received: ' + message);
                });
    }
}

When I initially access the page that is described by this component, everything works as expected (console.log() is logging for every message I receive).

When I leave the page, MyHubConnection.off('Broadcast'); is called. Then after I access the previous page again, the constructor is called and another subscription is made, but the previous one is not closed, and I get two console.log() calls.

Where's the mistake I'm making? Shouldn't MyHubConnection.off('Broadcast'); close the current subscription when I leave the page?

Dryfoos answered 22/1, 2019 at 15:55 Comment(1)
did you found any solution to this problem? ThanksLull

© 2022 - 2024 — McMap. All rights reserved.