public async Task RegisterOnPremiseAsync(IOnPremiseConnectionContext onPremiseConnectionContext)
        {
            CheckDisposed();

            _logger?.Debug("Registering link. link-id={LinkId}, connection-id={ConnectionId}, user-name={UserName}, role={Role} connector-version={ConnectorVersion}, connector-assembly-version={ConnectorAssemblyVersion}",
                           onPremiseConnectionContext.LinkId,
                           onPremiseConnectionContext.ConnectionId,
                           onPremiseConnectionContext.UserName,
                           onPremiseConnectionContext.Role,
                           onPremiseConnectionContext.ConnectorVersion,
                           onPremiseConnectionContext.ConnectorAssemblyVersion);

            await _linkRepository.AddOrRenewActiveConnectionAsync(onPremiseConnectionContext.LinkId, OriginId, onPremiseConnectionContext.ConnectionId, onPremiseConnectionContext.ConnectorVersion, onPremiseConnectionContext.ConnectorAssemblyVersion).ConfigureAwait(false);

            lock (_requestSubscriptions)
            {
                if (!_requestSubscriptions.ContainsKey(onPremiseConnectionContext.ConnectionId))
                {
                    _requestSubscriptions[onPremiseConnectionContext.ConnectionId] = _messageDispatcher.OnRequestReceived(onPremiseConnectionContext.LinkId, onPremiseConnectionContext.ConnectionId, !onPremiseConnectionContext.SupportsAck)
                                                                                     .Subscribe(request => onPremiseConnectionContext.RequestAction(request, _cancellationToken));

                    onPremiseConnectionContext.IsActive = true;
                }
            }

            _connectionContexts.TryAdd(onPremiseConnectionContext.ConnectionId, onPremiseConnectionContext);

            if (onPremiseConnectionContext.SupportsConfiguration)
            {
                await ProvideLinkConfigurationAsync(onPremiseConnectionContext).ConfigureAwait(false);
            }
        }