Обнаружить потерю соединения WinRM - PullRequest
0 голосов
/ 06 июня 2019

Я подключаюсь к удаленному ПК через WinRM, используя C #.

Я хотел бы иметь возможность обнаруживать как можно быстрее, если соединение потеряно (но не правильно закрыто пультом, например, при отключении питания).ПК был закрыт или кабель Ethernet отключен).Я хотел бы обнаружить потерю соединения менее чем за 5 секунд.Это возможно?

Для информации, я использую это соединение для запуска некоторых команд PowerShell, которые могут длиться несколько минут.Оптимально, я хотел бы обнаружить потерю соединения независимо от того, нахожусь ли я в центре одной из этих команд или нет.

Мой код C #:

WSManConnectionInfo connectionInfo = new WSManConnectionInfo(true, ipAddress, 5986, "/wsman", "http://schemas.microsoft.com/powershell/Microsoft.PowerShell", accountCredential);
connectionInfo.SkipCACheck = true; // SkipCACheck allows to connect without installing the certificate on the host.
connectionInfo.SkipCNCheck = true; // SkipCNCheck allows server name to not match certificate.
connectionInfo.OpenTimeout = 3000; // 3s
connectionInfo.OperationTimeout = 300000; // 5min
connectionInfo.IdleTimeout = 7200000; // 2h
runspace = RunspaceFactory.CreateRunspace(connectionInfo);

1 Ответ

0 голосов
/ 06 июня 2019

Я считаю, что ping подходит для чего-то подобного:

private bool HostPingable(string host)
    {
        try
        {
            var ping = new Ping();
            var reply = ping.Send(host);
            return reply != null && reply.Status == IPStatus.Success;
        }
        catch (Exception e)
        {
            e.LogException(Logger, host);
        }
        finally { GC.Collect(); }
        return false;
    }

Перед установкой любых соединений WinRM вы можете выполнить это, чтобы проверить, подключен ли хост.

...