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