【问题标题】:Windows Service loses Internet after 40 minutesWindows 服务在 40 分钟后失去 Internet
【发布时间】:2018-03-12 22:12:24
【问题描述】:

我有一个简单的 Windows 服务 (C#),它使用计时器每 15 分钟检查一次外部 API。

该服务运行良好,直到机器休眠,然后经过几次迭代(大约 40 分钟)后,它失去了互联网并且所有请求超时。此行为可在机器、帐户等之间重现,并且在服务重新启动之前不会恢复。

奇怪的是,如果我们让 Fiddler 在机器上运行,这不会发生 - 该服务将运行数天而没有问题。

我们尝试在自定义/管理员帐户、NetworkService 和 LocalService 帐户下运行它,允许用户作为操作系统运行,在 nic 上进行节能配置,尝试多台机器(7 和 Server 08),将所有代码移植到一个 WinForms 应用程序 - 都具有相同的行为。

我正在拔头发,希望“与 Fiddler 一起工作”会引起知情人士的注意……我的下一个测试是编写一个“控制器服务”来停止/重新启动第一个服务,但我讨厌那个解决方案。

*已更新,这是发出 API 请求的代码

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(uriDomain + uriLogin);
    WebResponse resp = req.GetResponse();

并下载可用文件

    using (WebClient client = new WebClient())
    {
        client.Headers["Cookie"] = persistCookie;
        client.DownloadFile(uriDomain + fileName, localStoragePath + fileName);
    }

.net CLR 应该回收连接 - 这些对象没有明确的关闭等。此外,我不明白运行 Fiddler 是如何让一切正常工作的。

谢谢

【问题讨论】:

  • 具体这个服务?其他事情是否继续有效?您的服务是否打开了一个套接字,并且失败了,或者它是否在一段时间后无法连接新的套接字?您看到了哪些错误值/行为?
  • 服务继续运行并继续尝试连接到外部 API,但在机器休眠 40 分钟后,所有尝试都超时。其他应用程序将运行,但即使是 ping 外部域的批处理脚本也会在这 40 分钟后失去互联网。
  • 如果批处理脚本(ping 外部域)正在运行但您的服务没有,问题是否仍然存在?

标签: networking windows-services firewall windows-administration


【解决方案1】:

听起来你的连接用完了。

快速测试是将时间从 15 分钟更改为 1 分钟,然后重复测试。如果它失败得更快,那么服务很可能没有正确关闭连接。最终你会达到极限。

【讨论】:

  • 谢谢 - 我尝试了 5、10、15 分钟的间隔,它总是在 appx 40 分钟之后 - 与发出了多少请求无关。每个间隔将发出 2 到 30 个以上的请求(下载文件等)。一切都很好,但是一旦 40 分钟过去了,所有请求都会失败。
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 2023-03-15
  • 2015-04-15
  • 2021-12-26
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多