【发布时间】: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