【问题标题】:Machine-Specific HttpWebResponse Timeout机器特定的 HttpWebResponse 超时
【发布时间】:2013-01-08 18:09:21
【问题描述】:

我有一个非常奇怪的特定于机器的问题。在某些机器上,下面的代码有效,在其他机器上它会冻结,直到 GetResponse() 调用引发超时异常。

string url = "https://myserver/myimage.png";

System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) =>
{
     return true;
});

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Method = "GET";
req.AllowAutoRedirect = false;

try
{
    using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
    {
        Console.WriteLine("Success");
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.ToString());
}

Console.ReadKey();

我在正常工作的机器和失败的机器之间找不到任何操作系统/配置模式。这是一个以管理员用户身份运行的控制台应用程序。

唯一特别的一点是,被访问的 URL 是一个运行到使用自颁发 SSL 证书的测试服务器的图像,因此它需要使用上面代码中显示的 ServerCertificateValidationCallback 的解决方法。

我测试过的其他 URL 工作正常。

谁能帮我找出导致此问题的可能原因和解决方法?

【问题讨论】:

  • 如果您在坏机器上的浏览器中打开该 url 会发生什么?
  • 快速刺探:比较 machine.configs,检查防火墙设置,从两个客户端 ping 服务器。很明显我知道。
  • Nicholas:给出有关 SSL 错误的警告,如果您说 OK,它将正确打开 URL。在 Chrome、Firefox 和 IE 上测试。
  • Casper:防火墙已禁用,两台机器都可以 ping 通。我会检查 machine.config 看看是否能找到任何相关的内容。

标签: c# ssl httpwebrequest timeout


【解决方案1】:

像往常一样,一旦弄清楚就很简单了:不存在问题的机器安装了 .Net Framework 4.5。

这很可能是因为 4.5 是 4.0 的 in-place update,并且包含几个核心库的错误修复。

【讨论】:

    【解决方案2】:

    我在 Win7 , VS2010 上遇到过同样的问题,通过 windows 更新解决了 - 更新到 .NET 4.5.1
    另一件值得一提的是,它也只发生在特定的服务器上,不仅特定的客户端。
    (我会发表评论,但没有足够的评级)
    有人解决了这个问题吗不使用 Windows 更新?

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多