public IConfigurationSession OpenConfigurationSession(IClientAuthenticationCredential credentials) { this.credentials = credentials; try { _session = new OutProcConfigurationSession(_serviceURI, _channel, credentials, _channelFormatter); _session.IsDatabaseSession = isDatabaseClient; _session.IsDistributorSession = isDistributorClient; _session.IsConfigurationSession = isConfigurationClient; ServerAuthenticationCredenital = _session.Authenticate(credentials); _session.Channel.IsAuthenticated = ServerAuthenticationCredenital.IsAuthenticated; _session.SessionType = _sessionType; if (ServerAuthenticationCredenital.IsAuthenticated) { DetermineSecondaryConfigurationServer(); _session.SessionId = ServerAuthenticationCredenital.SessionId; return(_session); } else { throw new Alachisoft.NosDB.Common.Security.SecurityException(ErrorCodes.Security.USER_NOT_REGISTERED, new string[1] { credentials.UserName }); } } catch (Exception ex) { _channel.Disconnect(); throw; } }
private bool ConnectToPeerServer(bool changeRole = true) { if (IsClustered) { try { DatabaseRPCService rpcService = new DatabaseRPCService(_peerNode.Name); IConfigurationServer remoteCfgServer = rpcService.GetConfigurationServer(new TimeSpan(0, 1, 30), Common.Communication.SessionTypes.Client, new ConfigurationChannelFormatter()); ((OutProcConfigurationClient)remoteCfgServer).AutoReconnect = false; remoteCfgServer.MarkConfiguraitonSession(); OutProcConfigurationSession session = remoteCfgServer.OpenConfigurationSession(new SSPIClientAuthenticationCredential()) as OutProcConfigurationSession; session.SetChannelDisconnectedListener(this); session.AutoReconnect = false; session.MarkSessionInternal(); _session = session; if (LoggerManager.Instance.CONDBLogger != null && LoggerManager.Instance.CONDBLogger.IsInfoEnabled) { LoggerManager.Instance.CONDBLogger.Info("ConfigurationCluster.Connect", "connected with peer server " + _peerNode.Name); } } catch (Exception e) { //if (LoggerManager.Instance.CONDBLogger != null && LoggerManager.Instance.CONDBLogger.IsErrorEnabled) // LoggerManager.Instance.CONDBLogger.Error("ConfigurationCluster.Connect", e.ToString()); } } if (changeRole) { DetermineRole(); if (_currentRole == NodeRole.Secondary) { if (_configuration != null) { ServerNode localNode = _configuration.Servers.GetNode(_localServerIP); if (_peerNode != null && _peerNode.Priority > localNode.Priority) { //Let's take over TakeOverPrimaryRole(); } else { //Need to replicate state from peer node ReplicateStateFromPeerServer(); } } _status.SetStatusBit(RUNNING, UNINITIIALIZED); } } return(_session != null); }
public void ChannelDisconnected(IRequestResponseChannel channel, string reason) { if (_disposed) { return; } lock (this) { _session = null; //Try to re-connect immediately. if (ConnectToPeerServer(false)) { return; } //In case we are unable to reconnect DetermineRole(); ConnectInBackground(); } }