【问题标题】:Detect WinRM connection loss检测 WinRM 连接丢失
【发布时间】:2019-06-06 19:36:40
【问题描述】:

我使用 C# 通过 WinRM 连接到远程 PC。

我希望能够尽快检测到连接是否丢失(但没有被遥控器正确关闭,例如 PC 电源关闭或以太网电缆断开)。 我想在 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);

【问题讨论】:

    标签: c# .net winrm


    【解决方案1】:

    我发现 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 连接之前,您可以运行它来查看主机是否在线。

    【讨论】:

    • 理想情况下,我希望保持 WinRM 连接永久打开,定期检查它是否仍然有效,并尝试在断开时自动重新连接。我不知道定期 ping 是否有意义?
    • 是的,这只有在您要断开连接并重新连接时才有效。
    猜你喜欢
    • 2011-05-19
    • 2016-09-04
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多