/// <summary> /// Creates an instance of <see cref="WindowsServiceClient"/>. /// </summary> /// <param name="connectionString">Connection information such as server ip address and port where windows service is running.</param> public WindowsServiceClient(string connectionString) { // Initialize status cache members. Dictionary<string, string> settings = connectionString.ParseKeyValuePairs(); SerializationFormat serializationFormat; string setting; if (settings.TryGetValue("statusBufferSize", out setting) && !string.IsNullOrWhiteSpace(setting)) m_statusBufferSize = int.Parse(setting); else m_statusBufferSize = 8192; m_cachedStatus = string.Empty; // Initialize remoting client socket. if (!settings.TryGetValue("enabledSslProtocols", out setting) || !setting.Equals("None", StringComparison.OrdinalIgnoreCase)) m_remotingClient = InitializeTlsClient(connectionString); else m_remotingClient = InitializeTcpClient(connectionString); // Parse out desired message serialization format, if specified if (!settings.TryGetValue("serializationFormat", out setting) || !Enum.TryParse(setting, true, out serializationFormat)) serializationFormat = SerializationFormat.Binary; // Initialize windows service client. m_clientHelper = new ClientHelper(); m_clientHelper.SerializationFormat = serializationFormat; m_clientHelper.RemotingClient = m_remotingClient; m_clientHelper.ReceivedServiceUpdate += ClientHelper_ReceivedServiceUpdate; m_clientHelper.AuthenticationSuccess += ClientHelper_AuthenticationSuccess; m_clientHelper.AuthenticationFailure += ClientHelper_AuthenticationFailure; }
/// <summary> /// Releases the unmanaged resources used by the <see cref="ServiceClientBase"/> object and optionally releases the managed resources. /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { if (!m_disposed) { try { if (disposing) { if ((object)m_clientHelper != null) { m_clientHelper.Dispose(); m_clientHelper = null; } if ((object)m_remotingClient != null) { m_remotingClient.Dispose(); m_remotingClient = null; } if ((object)m_errorLogger != null) { m_errorLogger.Dispose(); m_errorLogger = null; } } } finally { m_disposed = true; // Prevent duplicate dispose. } } }
/// <summary> /// Initializes the remoting client, client helper, and error logger. /// </summary> public void Initialize() { CategorizedSettingsElementCollection remotingClientSettings; try { remotingClientSettings = ConfigurationFile.Current.Settings["remotingClient"]; } catch { remotingClientSettings = null; } if ((object)remotingClientSettings != null) { if (remotingClientSettings.Cast<CategorizedSettingsElement>().Any(element => element.Name.Equals("EnabledSslProtocols", StringComparison.OrdinalIgnoreCase) && !element.Value.Equals("None", StringComparison.OrdinalIgnoreCase))) m_remotingClient = InitializeTlsClient(); else m_remotingClient = InitializeTcpClient(); } else { m_remotingClient = InitializeTlsClient(); } m_clientHelper = new ClientHelper(); m_clientHelper.PersistSettings = true; m_clientHelper.RemotingClient = m_remotingClient; m_clientHelper.Initialize(); m_errorLogger = new ErrorLogger(); m_errorLogger.ErrorLog.FileName = "ServiceClient.ErrorLog.txt"; m_errorLogger.LogToEventLog = false; m_errorLogger.LogToUI = true; m_errorLogger.PersistSettings = true; m_errorLogger.ErrorLog.Initialize(); m_errorLogger.Initialize(); }
/// <summary> /// Initializes the remoting client, client helper, and error logger. /// </summary> public void Initialize() { CategorizedSettingsElementCollection remotingClientSettings; string[] args; string filter; try { remotingClientSettings = ConfigurationFile.Current.Settings["remotingClient"]; } catch { remotingClientSettings = null; } if ((object)remotingClientSettings != null) { if (remotingClientSettings.Cast<CategorizedSettingsElement>().Any(element => element.Name.Equals("EnabledSslProtocols", StringComparison.OrdinalIgnoreCase) && !element.Value.Equals("None", StringComparison.OrdinalIgnoreCase))) m_remotingClient = InitializeTlsClient(); else m_remotingClient = InitializeTcpClient(); } else { m_remotingClient = InitializeTlsClient(); } args = Arguments.ToArgs(Environment.CommandLine); filter = Enumerable.Range(0, args.Length) .Where(index => args[index].StartsWith("--filter=", StringComparison.OrdinalIgnoreCase)) .Select(index => Regex.Replace(args[index], "^--filter=", "", RegexOptions.IgnoreCase)) .FirstOrDefault() ?? ClientHelper.DefaultStatusMessageFilter; m_clientHelper = new ClientHelper(); m_clientHelper.PersistSettings = true; m_clientHelper.RemotingClient = m_remotingClient; m_clientHelper.StatusMessageFilter = filter; m_clientHelper.Initialize(); m_errorLogger = new ErrorLogger(); m_errorLogger.ErrorLog.FileName = "ServiceClient.ErrorLog.txt"; m_errorLogger.LogToEventLog = false; m_errorLogger.LogToUI = true; m_errorLogger.PersistSettings = true; m_errorLogger.ErrorLog.Initialize(); m_errorLogger.Initialize(); }