/// <summary> /// Called every 1-10s /// </summary> /// <param name="dt"></param> public void PingServer(DateTime dt) { if (!isClientAuthorized()) { throw new SecurityException("Access denied"); } if (disconnectTimer.Enabled) { disconnectTimer.Stop(); disconnectTimer.Start(); } X509Certificate2 clientCert = getClientCertificate(); string commonName = Helper.ExtractCommonNameFromCertificate(clientCert); Logger.LogData(dt, commonName); disconnectTimer.Interval = 10000; disconnectTimer.Enabled = true; disconnectTimer.AutoReset = false; IDisconnectCallback currentClient = OperationContext.Current.GetCallbackChannel <IDisconnectCallback>(); string clientIpAddress = (OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty).Address; disconnectTimer.Elapsed += (sender, e) => DisconnectTimer_Elapsed(sender, e, currentClient, clientIpAddress); }