我在客户端中使用WebRequest来使用Internet上的Web服务。每个请求都在单独的线程中触发。
如果在 IIS 中承载客户端,它运行良好。但是,如果客户端托管在 Windows 服务中,则大多数请求都会出现超时错误。
当我尝试使用 Fiddler 调试问题时,WebRequest 运行良好,因为所有流量都通过 127.0.0.1:8888
如果没有Fiddler,流量会直接通过随机端口进入互联网,超时问题再次出现。
Windows 服务在本地系统帐户下运行。
如果客户端在未使用代理的情况下处于 Windows 服务中,为什么会出现超时?
更新:我最初的问题不清楚。请求是同时发出的(或以非常短的间隔(。这与 ServicePoint 类中的连接限制有关。默认情况下,只允许 2 个连接到同一外部目标。如果目标是本地的,则限制将为 int。最大值。这就是为什么小提琴手可以神奇地解决代理问题的原因。所以我手动将 DefaultConnectionLimit 设置为 100,请求是在线的。
在 C# 中调整 HttpWebRequest 连接超时
通过运行 Fiddler "神奇地"修复的最常见问题来源是 .NET 代码无法对 GetResponseStream()
返回的对象调用Close()
。有关更多详细信息,请参阅 http://www.telerik.com/automated-testing-tools/blog/13-02-28/help-running-fiddler-fixes-my-app.aspx。