public static void ClientInitialize() { if (!AutoFollow.Enabled) { return; } if (DateTime.UtcNow.Subtract(LastUnexpectedException).TotalSeconds < 1) { return; } ConnectionAttempts++; try { if (!ClientConnected && AutoFollow.Enabled) { var serverPort = Settings.Network.ServerPort; Server.ServerUri = new Uri(Server.ServerUri.AbsoluteUri.Replace(Server._basePort.ToString(), serverPort.ToString())); Log.Info("Initializing Client Service connection to {0} Attempt={1}", Server.ServerUri.AbsoluteUri + "Follow", ConnectionAttempts); var binding = new BasicHttpBinding { OpenTimeout = TimeSpan.FromMilliseconds(5000), SendTimeout = TimeSpan.FromMilliseconds(5000), CloseTimeout = TimeSpan.FromMilliseconds(500), MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue, MaxBufferPoolSize = int.MaxValue, TransferMode = TransferMode.Streamed }; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; var endPointAddress = new EndpointAddress(Server.ServerUri.AbsoluteUri + "Follow/?wsdl"); _httpFactory = new ChannelFactory <IService>(binding, endPointAddress); _httpProxy = _httpFactory.CreateChannel(); OnClientInitialized?.Invoke(); ClientConnected = true; } } catch (Exception ex) { Log.Info("Exception in ClientInitialize() {0} Attempt={1}", ex, ConnectionAttempts); LastUnexpectedException = DateTime.UtcNow; } if (ConnectionAttempts > 5 && !ClientConnected) { Thread.Sleep(5000); } }
protected override void OnMessage(MessageEventArgs e) { if (!e.IsText) { return; } var msg = e.Data; logger.Debug(new LogReceivedMessage { Message = msg, Session = ID }.ToJson()); string msgType = null; try { msgType = JObject.Parse(msg)["type"]?.ToObject <string>(); switch (msgType) { case "Authorization": OnAuthorization?.Invoke(this, Authorization.FromJson(msg)); return; case "Client.Initialized": OnClientInitialized?.Invoke(this, ClientInitialized.FromJson(msg)); return; case "Client.Register": OnClientRegister?.Invoke(this, ClientRegister.FromJson(msg)); return; case "Config.Change": if (Configurer) { OnConfigChange?.Invoke(this, ConfigChange.FromJson(msg)); } return; case "Config.Register": Configurer = true; Subscriber = true; OnConfigRegister?.Invoke(this); return; case "Config.Start": if (Configurer) { OnConfigStart?.Invoke(this); } return; case "Config.Stop": if (Configurer) { OnConfigStop?.Invoke(this); } return; case "Execution.StartRequest": OnExecutionRequest?.Invoke(this, ExecutionStartRequest.FromJson(msg)); return; case "Execution.Started": OnExecutionStarted?.Invoke(this, ExecutionStarted.FromJson(msg)); return; case "Execution.Stopped": OnExecutionStopped?.Invoke(this, ExecutionStopped.FromJson(msg)); return; case "Info.Message": OnInfo?.Invoke(this, InfoMessage.FromJson(msg)); return; case "Info.Subscribe": if (!Subscriber) { Subscriber = true; OnSubscribe?.Invoke(this); } return; case "Info.Unsubscribe": Subscriber = false; return; default: logger.Info(new LogReceivedUnknownMessageType { MessageType = msgType, Session = ID }.ToJson()); return; } } catch (Exception ex) { //logger.Error() logger.Error(new LogMessageHandlingError { Exception = ex, MessageType = msgType, Session = ID }.ToJson()); } }